在我的 View 模型中,我有一个对象列表。我迭代这些对象,并为每个对象创建控件。在以下情况下,我想向人们显示每个对象的文本框和按钮。当用户单击按钮时,将发布信息,我可以将数据保存在 Controller 中。
在用户界面中,用户可以更改所需的表单,然后单击“保存”。
我的问题是模型在发布到 Controller 时为null。
我的 Razor 代码:
using (Html.BeginForm())
{
foreach (var contributor in Model.Contributor)
{
@Html.HiddenFor(model => contributor.Id)
<div class="formrow">
@Html.ValidationSummary(true)
</div>
<h2>@Html.TextRaw("AuthorInfo", "Author")</h2>
<div class="formrow">
@Html.EditorFor(model => contributor.FirstName)
<div class="formvalidation">
@Html.ValidationMessageFor(model => contributor.FirstName)
</div>
</div>
<div class="formrow right">
<input type="hidden" name="formsubmitted" value="true" />
<input type="submit" class="button" value="@Html.Text("ButtonText", "Save")" />
</div>
}
}
我的 View 模型代码
public class ProfileModel
{
public string Message { get; set; }
public List<PublisherModel> Publisher { get; set; }
public List<ContributorModel> Contributor { get; set; }
public ContributorModel NewContributor { get; set; }
}
我的 Controller 代码
[HttpPost]
public ActionResult Mine(ProfileModel model, string newuser)
{
//
}
如何解决?
我想我必须以某种方式存储更改的方式来扩展 View 模型。但我真的不知道如何。
现在,当到达 Controller 时,ProfileModel中的所有属性均为null。
有任何想法吗?
最佳答案
基本上,问题在于默认模型绑定(bind)程序无法在foreach循环中正确绑定(bind)集合项。换句话说,它错误地命名了元素,这就是集合在参数中显示为null的原因。
我确定有各种各样的变通方法,助手和其他东西,但是我不熟悉它们,所以我只使用for循环而不是foreach,这样可以正确地命名元素。
试试这个:
@for (int i = 0; i < Model.Contributor.Count(); i++)
{
@Html.HiddenFor(model => Model.Contributor[i].Id)
<div class="formrow">
@Html.ValidationSummary(true)
</div>
<h2>@Html.TextRaw("AuthorInfo", "Author")</h2>
<div class="formrow">
@Html.EditorFor(model => Model.Contributor[i].FirstName)
<div class="formvalidation">
@Html.ValidationMessageFor(model => Model.Contributor[i].FirstName)
</div>
</div>
<div class="formrow right">
<input type="hidden" name="formsubmitted" value="true" />
<input type="submit" class="button" value="@Html.Text("ButtonText", "Save")" />
</div>
}
我建议您使用调试工具来查看元素是否具有正确的名称属性,在您的情况下,它们应类似于Contributor [0] .Id,Contributor [0] .FirstName等。
关于asp.net - 对于MVC 4中具有控件和提交表单(Html.BeginForm)的每个循环,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15636284/