好的,我希望有人可以帮助我解决这个问题(提前致谢!)。我正在使用 MVC4。
我的 ContractsModel 包含(除其他外)一个 ContractModel 列表。在我的部分观点中,我循环遍历列表,为每个列表创建一个表单。到现在为止还挺好。问题在于回发。第一种形式总是很好地回帖。但其他人(2、3、4 等)总是返回 null。
我已经使用调试工具进行了检查,并确认呈现的控件已正确命名。
<select name="Contracts[0].OrganizationId" id="Contracts_0__OrganizationId">
<select name="Contracts[1].OrganizationId" id="Contracts_1__OrganizationId">
<select name="Contracts[2].OrganizationId" id="Contracts_2__OrganizationId">
我还确认客户端确实将数据返回到服务器,但由于某种原因,它似乎没有重新附加到我的 ActionResult 所期望的模型中。有任何想法吗?
为了简洁起见,我已经最小化了我的代码。
这是我的模型:
public class ContractsModel
{
public ContractsModel()
{
this.Contracts = new List<ContractModel>();
this.OrganizationList = new List<SelectListItem>();
this.ContractNumList = new List<SelectListItem>();
}
public string ParentProjectId { get; set; }
// etc, etc .....
public List<ContractModel> Contracts { get; set; }
public List<SelectListItem> OrganizationList { get; set; }
public List<SelectListItem> ContractNumList { get; set; }
}
public class ContractModel
{
public string OrganizationId { get; set; }
public string Organization { get; set; }
public string ContractNumId { get; set; }
public string ContractNum { get; set; }
}
这是我的控制器动作
[HttpPost]
public ActionResult _ContractsEdit(ContractsModel model)
{
if (ModelState.IsValid) {
//blah, blah, blah....
}
return PartialView("Index", ProjectModel);
}
这是我的部分视图
@model Manager.Models.ContractsModel
@for (int i = 0; i < Model.Contracts.Count(); i++)
{
var divId = "divContractsModelItem_" + (i + 1);
var saveButtonId = "btnContractsEditSave_" + (i + 1);
<div id = "@divId">
@using (Html.BeginForm("_ContractsEdit", "Projects", FormMethod.Post))
{
<fieldset>
<legend>General:</legend>
<div>
<label>Contracting Organization:</label>
@Html.DropDownListFor(model => model.Contracts[i].OrganizationId, new SelectList(Model.OrganizationList, "value", "text", Model.Contracts[i].OrganizationId))
</div>
<div>
<label>Contract Number:</label>
@Html.DropDownListFor(model => model.Contracts[i].ContractNumId, new SelectList(Model.ContractNumList, "value", "text", Model.Contracts[i].ContractNumId))
</div>
<div>
<button id="@saveButtonId" type="submit">Save</button>
</div>
</fieldset>
}
</div>
}