将数据发布到操作方法时的空列表(ASP .Net MVC)

时间:2011-02-21 13:51:24

标签: asp.net-mvc

我在向Post方法提交数据方面遇到了问题。

我有一个类似的课程:

public class A
{
  public int Id{get; set;}
  public string Name{get; set;}
  public List<B> Bs {get; set;}
}

在视图中我有一个Bs对象列表,我可以添加到A类的Bs属性而没有任何问题。我也可以在我的Razor View中看到结果没有任何问题。

当我将最终结果发布到我的添加操作方法以将其保存在我的数据库中时,会出现问题。

当最终对象发送到我的Action方法时,Bs属性完全为空。所以我做的是将该集合添加到TempData字典中并在我的Add Action方法中检索它。

我的问题很简单,为什么我的Bs属性在发布到我的编辑操作方法时是空的?我之所以这样问是因为在我的AddBs动作方法中,我将我的B添加到我的模型并将其发送回View,所有内容都可以找到。

编辑: @SLaks

这是我在视图中的代码:

&lt;%using(Html.BeginForm(“Create”,“A”))            {%>             &lt;%:Html.ValidationSummary(true)%&gt;             

            <div class="editor-label">
                <%: Html.LabelFor(model => model.Name) %>
            </div>
            <div class="editor-field">
                <%: Html.EditorFor(model => model.Name) %>
                <%: Html.ValidationMessageFor(model => model.Name) %>
            </div>

            <% if (Model.Bs.Any())
               { %>
                    <h3>B List</h3>
                    <%= Html.Telerik().Grid(Model.Bs)
                    .Name("CheckedOrders")
                    .Columns(columns =>
                    {
                        columns.Bound(d => d.Id).Width(100);
                        columns.Bound(d => d.Name).Width(300);
                    })
                    .Footer(false)
                    %>
             <% } %>

            <br />

            <p>
                <input type="submit" value="Create" />
            </p>
        </fieldset>
    <% } %>

This is the HTML generated:

<form action="/Admin/BusinessType/Create" method="post">
    <fieldset>

        <div class="editor-label">
            <label for="Name">Name</label>
        </div>
        <div class="editor-field">
            <input class="text-box single-line" id="Name" name="Name" type="text" value="" />

            <span class="field-validation-valid" data-valmsg-for="Name" data-valmsg-replace="true"></span>

        </div>                 
                <div class="t-widget t-grid" id="CheckedOrders"><table cellspacing="0"><colgroup><col style="width:100px" /><col style="width:300px" /></colgroup><thead class="t-grid-header"><tr><th class="t-header" scope="col">Id</th><th class="t-last-header t-header" scope="col">Name</th></tr></thead><tbody><tr><td>2</td><td class="t-last">Heeey</td></tr><tr class="t-alt"><td>3</td><td class="t-last">Testtttt</td></tr></tbody></table></div>

        <br />
        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
</form>

上面的代码在浏览器中显示完全正常,我甚至可以看到Bs列表,但是当我输入名称并单击“创建”时,Bs列表为空。

2 个答案:

答案 0 :(得分:1)

我认为这是秘密。我的应用程序中有一个类似的模型。在视图中,您必须正确格式化控件的名称:

<%
for (int i=0; i<model.Bs.Count; i++)
{
  Html.TextBox( string.Format( "Bs[{0}].Property1OfB", i), model.Bs.Property1OfB );
  Html.TextBox( string.Format( "Bs[{0}].Property2OfB", i), model.Bs.Property2OfB );
}
%>

答案 1 :(得分:0)

Add方法只会收到发布到其中的表单中的<input>个元素。