ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

CodeGo.net>如何将复杂的对象集合传递给控制器​​在MVC

2019-10-30 04:07:27  阅读:128  来源: 互联网

标签:razor asp-net-mvc-4 asp-net c asp-net-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/

标签:razor,asp-net-mvc-4,asp-net,c,asp-net-mvc
来源: https://codeday.me/bug/20191030/1965116.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有