gpt4 book ai didi

c# - MVC 模型不绑定(bind)到字典

转载 作者:行者123 更新时间:2023-11-30 22:08:30 25 4
gpt4 key购买 nike

我正在使用 ASP.Net MVC4 (Razor)。我有以下代码:

Dictionary<string, OccasionObject> occasionList = new Dictionary<string, OccasionObject>()

键是场合类别的字符串。 occassion 对象有 3 个属性:isAttending(bool) , ID(int) , 和 Name(string)

在我的 cshtml 文件中,我执行以下操作:

@foreach(string s in model.occasionList .Keys)
{
foreach(var o in model.occasionList .Keys[s])
{
@Html.CheckBoxFor(m=>m.occasionList[s].FirstOrDefault(ev=>ev.ID == o.ID).isAttending);
}
}

这在负载上完美绑定(bind),选中我在 SQL 中手动选中的框。但是,当我将此模型发布回服务器时,occasionList 字典为空。该模型绑定(bind)良好,因为我在模型中拥有的其他属性仍会返回。

有什么想法吗?

谢谢,主场

最佳答案

如果您将字典想象成一个IEnumerable<KeyValuePair<string, IEnumerable<OccasionObject>>>,模型绑定(bind)器将字典视为一个集合。很容易理解为什么它不受约束。

什么 @Html.CheckBoxFor(m=>m.occasionList[s].FirstOrDefault(ev=>ev.ID == o.ID).isAttending);正在生成的是:

<input type="checkbox" name="occasionList[0].Value.isAttending" ../>

所以 key 丢失了。

试试这个:

@Html.Hidden("occasionList.Index", s)
@Html.CheckBoxFor(m=>m.occasionList[s].FirstOrDefault(ev=>ev.ID == o.ID).isAttending);
@Html.HiddenFor(m=>m.occasionList[s].Key)

第一个隐藏是因为您的索引可能会乱序,and explicitly providing an ".Index"是让模型 Binder 在这种情况下工作的唯一方法。

Here's另一个描述模型绑定(bind)到集合的资源。

关于c# - MVC 模型不绑定(bind)到字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22248739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com