我首先使用 MVC 和 EF DB。我的模型是由 EF 创建的。在我的模型中,我有两个 ICollection 类型属性。
我的问题是当我发布表单时,这些属性是空的(我不会发送它们来查看空值)
我的模型:
public partial class Account
{
public Account()
{
this.Account_Level = new HashSet<Account_Level>();
this.Account_Team = new HashSet<Account_Team>();
}
public long Id { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public bool IsAdmin { get; set; }
public virtual ICollection<Account_Level> Account_Level { get; set; }
public virtual ICollection<Account_Team> Account_Team { get; set; }
}
注意:我的 ICollection 属性不存在于我的 View 中,但我需要它们返回到我的 Controller 中。
编辑:
我已将以下代码添加到我的 View 中。在我的 html 中,我可以看到我的 Icollection 值被添加为隐藏,但当我发布帖子时,ICollection 属性仍然为空。所以我仍然没有恢复这些值。
for (int i = 0; i < Model.Account_Level.Count(); i++)
{
@Html.HiddenFor(m => m.Account_Level.ElementAt(i).AccountId)
@Html.HiddenFor(m => m.Account_Level.ElementAt(i).Id)
@Html.HiddenFor(m => m.Account_Level.ElementAt(i).LevelId)
}
for (int i = 0; i < Model.Account_Team.Count(); i++)
{
@Html.HiddenFor(m => m.Account_Team.ElementAt(i).AccountId)
@Html.HiddenFor(m => m.Account_Team.ElementAt(i).Id)
@Html.HiddenFor(m => m.Account_Team.ElementAt(i).TeamId)
}
最佳答案
您的代码存在的问题是 DefaultModelBinder
无法将您的隐藏字段绑定(bind)到您的模型,因为您的隐藏字段未遵循正确的命名约定。
Razor View 中的 HiddenFor 方法会生成类似以下内容的内容:
<input id="AccountId" type="hidden" value="1" name="AccountId" data-val-required="The AccountId field is required." data-val-number="The field AccountId must be a number." data-val="true">
如您所见,生成的名称是 AccountId
如果您想使其可绑定(bind),则这是不正确的。
正确的名称必须类似于 Account_Level[0].AccountId
。
以下是隐藏字段正确命名的完整示例:
for (int i = 0; i < Model.Account_Level.Count(); i++)
{
@Html.HiddenFor(m => m.Account_Level.ElementAt(i).AccountId, new { @Name = string.Format("Account_Level[{0}].AccountId", i) })
@Html.HiddenFor(m => m.Account_Level.ElementAt(i).Id, new { @Name = string.Format("Account_Level[{0}].Id", i) })
@Html.HiddenFor(m => m.Account_Level.ElementAt(i).LevelId, new { @Name = string.Format("Account_Level[{0}].LevelId", i) })
}
这将确保默认模型绑定(bind)器能够识别您的隐藏字段名称。
在这里您可以找到有关 ASP.NET MVC 命名约定的更多信息:
http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/
关于c# - MVC - 绑定(bind) ICollection 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26752793/