【发布时间】:2023-03-13 05:30:01
【问题描述】:
我有一个 PersonEditorModel,其中包含我希望在编辑器中表示的人员列表。我有一组 Person 对象,其中包含一组 Address 对象。我想为所有这些呈现文本框,以便用户可以编辑与这些名称关联的名称和地址。
class PersonEditorModel
{
public List<Person> People;
}
class Person
{
public string Name;
public List<Address> Addresses;
}
class Address
{
public string Value;
}
我正在生成一个用于编辑地址和与其关联的名称的表单。它使用 Ajax.BeginForm 因为这是一个简化的示例,源自我在一个更大的应用程序中遇到的问题,其中表单使用 Ajax 更新页面的不同部分以获得结果。
在基本表单的cshtml中:
@model Models.PersonEditorModel
@using (Ajax.BeginForm("Update", new AjaxOptions { HttpMethod = "Post" }))
{
<div>
@Html.EditorFor(x => x.People)
<button type="submit">Commit Changes</button>
</div>
}
Person.cshtml:
@model Models.Person
<div> @Html.TextBoxFor(x => x.Name) </div>
<div> @Html.EditorFor(x => x.Addresses) </div>
地址.cshtml:
@model Models.Address
<div> @Html.TextBoxFor(x => x.Value) </div>
控制器的动作方法:
public ActionResult Update(List<Person> people) { /* snip */ }
当我提交此表单时,立即在 Update() 中放置一个断点显示“人员”是一个长度正确的列表,但它绝对不包含任何数据——所有地址都是空字符串,即使表单数据为出现在 Request.Form 看起来是正确的。
什么可能导致这样的问题,以及解决这个问题的惯用 MVC 方法是什么?
注意:这是我在更复杂的应用程序中看到的一些行为的简化示例。我想我已经抓住了问题的本质,但可能还有其他一些未知的复杂因素。让我知道什么可能会使这复杂化导致我看到的问题,我会尽力提供我能提供的任何其他细节。
我已尝试让 Update 采用 PersonEditorModel 参数,但绝对没有任何数据。
【问题讨论】:
标签: c# asp.net-mvc asp.net-mvc-3 model-view-controller