我已经在一个项目上苦苦挣扎了几天,在我目前的迭代中,我决定使用编辑模板。
原始问题源自通过SQL中的外键链接到辅助表的主表。在ASP MVC中,辅助表用以下字段表示:
[UIHint("BankListAgentId")]
public virtual ICollection<BankListAgentId> BankListAgentId { get; set; }
因为这是一个集合对象,所以“编辑”页面上的GET
适用于每个特定项目,但是在POSTBACK
上,所有集合项目都突然为空。但是,所有其他字段都带有适当的数据。我正在尝试使用和编辑模板,但是仍然会返回集合项null
。
以下是我在视图中使用的代码
@model Monet.Models.BankListMaster
@using (Html.BeginForm())
{
<fieldset>
<legend>Stat(s) Fixed</legend>
<table id="fixedRows">
<tr>
<th>State Code</th>
<th>Agent ID</th>
<th></th>
</tr>
@foreach (var item in Model.BankListAgentId)
{
if (!String.IsNullOrWhiteSpace(item.AgentId) && item.FixedOrVariable.Equals("Fixed"))
{
@Html.EditorFor(model => item)
}
}
</table>
<br />
@Html.ActionLink("Add another", "BlankFixedRow", null, null, new { id = "addFixed" })
</fieldset>
}
这是编辑器模板。它的名称是BankListAgentId
,位于Views文件夹中名为EditorTemplates
的文件夹中
@model Monet.Models.BankListAgentId
<tr id="item-@Model.AgentId">
<td>
@Html.DropDownListFor(model => model.StateCode,
(SelectList)ViewBag.StateCodeList, Model.StateCode)
</td>
<td>
@Html.EditorFor(model => model.AgentId)
@Html.ValidationMessageFor(model => model.AgentId)
</td>
<td>
<a href="#" class="deleteRow">delete</a>
</td>
@*<td><a href="#" onclick="$('#item-@Model.AgentId').parent().remove();" style="float:right;">Delete</a></td>*@
</tr>
以下是BankListMaster
型号
public partial class BankListMaster
{
public BankListMaster()
{
this.BankListStateCode = new HashSet<BankListStateCode>();
this.BankListAgentId = new HashSet<BankListAgentId>();
this.BankListAttachments = new HashSet<BankListAttachments>();
}
public int ID { get; set; }
public string BankName { get; set; }
public virtual ICollection<BankListStateCode> BankListStateCode { get; set; }
public virtual ICollection<BankListAttachments> BankListAttachments { get; set; }
[UIHint("BankListAgentId")]
public virtual ICollection<BankListAgentId> BankListAgentId { get; set; }
}
最后这里是BankListAgentId
模型
public partial class BankListAgentId
{
public string AgentId { get; set; }
public int ID { get; set; }
public string FixedOrVariable { get; set; }
public string StateCode { get; set; }
public virtual BankListMaster BankListMaster { get; set; }
}
修改
用户需要能够动态更改列表。
答案 0 :(得分:0)
我认为您需要将此作为对集合的迭代,而不是foreach,以便正确绑定字段名称。
@for (int i = 0; i < Model.BankListAgentId.Count; i++)
{
if (!String.IsNullOrWhiteSpace(Model.BankListAgentId[i].AgentId) && Model.BankListAgentId[i].FixedOrVariable.Equals("Fixed"))
{
@Html.EditorFor(model => Model.BankListAgentId[i])
}
}
您也应该发布接收的ActionResult。
P.S。但正如DaveA正确地指出模型是ICollection,这将导致问题。它不是IEnumerable吗?