在foreach循环中输入的表单返回空模型

问题描述

| 我有一个列表对象,试图在foreach循环中显示文本框。但是,该帖子返回空对象。我看不出原因。 这是视图中的代码 <%using(Html.BeginForm(\“ makeTransfer \”,\“ shareTransfer \”)){%>
        <% foreach (var i in Model.Inform)//int i = 0; i < Model.Inform.Count(); i++){ %>
                <%:Html.HiddenFor(x=>i.shares,new{@value = i.shares}) %> 
              ...
                <td style = \"width:20px\"><%:Html.TextBoxFor(x=>i.sharesRq)%></td> cuddling
        <%} %>

    <%:Html.HiddenFor(x => x.accSrc,new { @value = Model.accSrc })%>
            <%:Html.HiddenFor(x=>x.accDst,new{ @value = Model.accDst}) %>

    Date of Transfer<%:Html.TextBoxFor(x => x.date)%>
            Transfer with benefit<%:Html.CheckBoxFor(x => x.withBenefit)%>

       <input type=\"submit\" name=\"save\" value=\"Save\" /></div>
       <input type=\"submit\" name=\"cancel\" value=\"Cancel\" /></div>  
<%}%> 这是控制器 公共ActionResult makeTransfer(vmTransfer传输,字符串保存,字符串取消)         {
        if (cancel != null)
            return RedirectToAction(\"startTransfer\");

        else if (save != null)
        {

            foreach (var t in transfer.Inform)
            { ...
我的问题是,transfer.Inform(最后一行的第二行)是表单发布时的列表为空。请尽快提供任何帮助。     

解决方法

我建议您使用编辑器模板,而不要在视图中编写任何循环:
<% using (Html.BeginForm(\"makeTransfer\",\"shareTransfer\")) { %>
    <%= Html.EditorFor(x => x.Inform) %>
    <%= Html.HiddenFor(x => x.accSrc,new { @value = Model.accSrc }) %>
    <%= Html.HiddenFor(x => x.accDst,new { @value = Model.accDst }) %>
    Date of Transfer <%= Html.TextBoxFor(x => x.date) %>
    Transfer with benefit <%= Html.CheckBoxFor(x => x.withBenefit) %>

    <input type=\"submit\" name=\"save\" value=\"Save\" /></div>
    <input type=\"submit\" name=\"cancel\" value=\"Cancel\" /></div>  
<% } %>
并在相应的编辑器模板(
~/Views/Shared/EditorTemplates/InformViewModel.ascx
)中:
<%@ Control 
    Language=\"C#\" 
    Inherits=\"System.Web.Mvc.ViewUserControl<AppName.Models.InformViewModel>\" 
%>
<%= Html.HiddenFor(x => x.shares) %> 
...
<td style=\"width:20px\">
    <%= Html.TextBoxFor(x => x.sharesRq) %>
</td>
备注:您可能需要根据
Inform
属性的类型来调整编辑器模板的名称。 编辑器模板将负责生成正确的ID和输入字段的名称,以便所有内容正确绑定:
[HttpPost]
public ActionResult makeTransfer(vmTransfer transfer,string save,string cancel)
{
    if (cancel != null)
    {
        return RedirectToAction(\"startTransfer\");
    }
    else if (save != null)
    {
        foreach (var t in transfer.Inform)
        {
            ...
        }
    }
    ...
}