隐藏如何添加属性
本文关键字:添加 属性 何添加 隐藏 | 更新日期: 2023-09-27 18:17:54
根据我对列表的MVC模型绑定的理解,属性的名称必须加在名称之前,否则整个系统无法绑定。例句:
<input type="text" name="people[0].FirstName" value="George" />
不幸的是,我有以下情况:
public class ProjectEditModel
{
public int ID { get; set; }
public List<ProjectIdea> Ideas { get; set; }
// huge list of related objects
}
public class ProjectIdea
{
public int ID { get; set; }
public string Name { get; set; }
}
我用一个表单来显示ProjectEditModel,用一个PartialView来显示projecdeas,这很复杂,所以我不想把所有东西都放在一个视图中。它看起来像这样:
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.HiddenFor(mbox => Model.ID)
@Html.Partial("AddAnotherProjectIdea", Model.Ideas)
<div class="form-group">
<div class="col-md-offset-0 col-md-10">
<input type="submit" value="@IndexRes.ButtonCreateNew" class="btn btn-primary" />
@Html.ActionLink(CommonRes.ButtonToIndex, "Index", null, new { @class = "btn btn-primary" })
</div>
</div>
}
和addanotherprojdea - partialview:
@model List<Domain.Entities.ProjectIdea>
<div id="IdeaList">
@for (int i = 0; i < Model.Count(); i++)
{
@Html.HiddenFor(mbox => Model[i].ID)
<div class="form-group">
@Html.LabelFor(m => Model[i].Name, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => Model[i].Name, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => Model[i].Name, "", new { @class = "text-danger" })
</div>
</div>
}
</div>
不幸的是,这个构造会导致像它没有绑定到ProjectEditModel,因为名称中缺少了"Ideas"名称。手动更改它可以工作:
是否有一种简单的方法可以将这个Property-Name添加到名称中,或者我可以欺骗绑定接受没有Propertyname的名称?
您可以更改post方法以接受2个参数,视图模型和集合,然后将集合分配给模型
[HttpPost]
public ActionResult(ProjectEditModel model, List<ProjectIdea> collection)
{
model.Ideas = collection;
...