【发布时间】:2011-02-22 06:17:23
【问题描述】:
我在向 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 中毫无问题地看到结果。
当我将最终结果发布到我的 Add Action Method 以将它们保存在我的数据库中时,就会出现问题。
当最终对象发送到我的 Action 方法时,Bs 属性完全为空。所以我所做的就是将该集合添加到 TempData 字典并在我的 Add Action 方法中检索它。
我的问题很简单,为什么我的 Bs 属性在发布到我的 Edit 操作方法时是空的?我之所以问这个问题是因为在我的 AddBs 操作方法中,我将我的 Bs 添加到我的模型中并将其发送回 View 并且到目前为止一切都找到了。
编辑: @SLaks
这是我的视图中的代码:
<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 列表,但是当我输入名称并单击 Create 时,Bs 列表是空的。
【问题讨论】:
-
它给 Grid 产生的控件起什么名字?
-
@Rob 我已将生成的 HTML 添加到问题中。
-
查看 HTML 似乎没有为 Bs 元素生成任何表单控件(因此没有一个可以回发)。您可以通过查看操作方法中的 Request.Form 和 Request.QueryString 来判断是否有可能使用这些值。
-
是否可以将集合添加到隐藏表单中?
标签: asp.net-mvc