[英]How to pass complex object collections to the controller in mvc
我是MVC的新手,對這個初學者問題感到抱歉。 我有以下模型類:
public class ReturnBookHedModel
{
public int RefferenceID { get; set; }
public int BorrowedRefNo { get; set; }
public int MemberId { get; set; }
public DateTime ReturnDate { get; set; }
public bool IsNeedToPayFine { get; set; }
public DateTime CurrentDate { get; set; }
public virtual List<ReturnBookDetModel> RetunBooks { get; set; }
public virtual MemberModel member { get; set; }
}
public class ReturnBookDetModel
{
public int BookID { get; set; }
public int RefferenceID { get; set; }
public bool IsReturned { get; set; }
public virtual ReturnBookHedModel ReturnBookHed { get; set; }
public virtual BookModel book { get; set; }
}
我有以下控制器方法:
public ActionResult SaveReturnBook(int refNo)
{
ReturnBookHedModel model = ReturnBookFacade.GetReturnBookBasedOnRefference(refNo);
return View(model);
}
//
// POST: /ReturnBook/Create
[HttpPost]
public ActionResult SaveReturnBook(ReturnBookHedModel model)
{
try
{
// TODO: Add insert logic here
return RedirectToAction("Index");
}
catch
{
return View();
}
}
在我的模型中我定義如下:
<div class="control-label">
@Html.LabelFor(model => model.BorrowedRefNo)
@Html.TextBoxFor(model => model.BorrowedRefNo, new { @class = "form-control" ,@readonly = "readonly" })
@Html.ValidationMessageFor(model => model.BorrowedRefNo)
</div>
// rest of the header details are here
<table>
<tr>
<th>
@Html.DisplayNameFor(model => model.RetunBooks.FirstOrDefault().IsReturned)
</th>
<th>
@Html.DisplayNameFor(model => model.RetunBooks.FirstOrDefault().BookID)
</th>
<th>
@Html.DisplayNameFor(model => model.RetunBooks.FirstOrDefault().book.BookName)
</th>
<th></th>
</tr>
@foreach (var item in Model.RetunBooks)
{
<tr >
<td>
@Html.CheckBoxFor(modelItem => item.IsReturned)
</td>
<td>
@Html.HiddenFor(modelItem => item.BookID);
@Html.DisplayFor(modelItem => item.BookID)
</td>
<td>
@Html.DisplayFor(modelItem => item.book.BookName)
</td>
</tr>
}
</table>
這工作正常..但這些表格細節(復雜對象)不在控制器的post方法中。 當我搜索我發現我可以使用這個詳細數據如下:但我不能使用它如下。
@for (var i = 0; i < Model.RetunBooks.Count; i++)
{
<tr>
<td>
@Html.CheckBoxFor(x => x.RetunBooks.)
</td>
</tr>
}
我該如何將這些信息發送給控制器
為了回收集合,您需要按照以下方式對它們進行索引,以便模型綁定器進行拾取。
這應該做的伎倆:
@for (var i = 0; i < Model.RetunBooks.Count; i++)
{
...
@Html.CheckBoxFor(model => Model.RetunBooks[i].IsReturned)
...
}
復雜對象需要以上述方式進行索引。
有關它的更多信息,請參見此處:
http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.