MVC - >绑定到自定义类型
问题描述:
财产的集合,从中集隐藏字段都被填充:MVC - >绑定到自定义类型
public abstract class MyPageView
{
[UIHint("List")]
public IEnumerable<IOption> OptionList { get; set; }
}
命令这样做:
@Html.EditorFor(m => m.OptionList)
的规定实行“名单“模板:
@model IEnumerable<RoomWanted.FlatShare.Services.ViewModels.Options.IOption>
@for (int i = 0; i < Model.Count(); i++)
{
@Html.HiddenFor(x => Model.ToList()[i].Id)
@Html.HiddenFor(x => Model.ToList()[i].Name)
}
我得到生成了什么:
<input id="OptionList__0__Id" name="OptionList.[0].Id" type="hidden" value="1" />
<input id="OptionList__0__Name" name="OptionList.[0].Name" type="hidden" value="New York" />
什么我需要生成,使模型正确结合的作品:
<input id="OptionList_0__Id" name="OptionList[0].Id" type="hidden" value="5"></input>
<input id="OptionList_0__Name" name="OptionList[0].Name" type="hidden" value="New York"></input>
如何摆脱点的任何想法,所以我有OptionList[0].Id
,而不是OptionList.[0].Id
?
干杯。
答
使用IList<IOption>
或IOption[]
代替:
public abstract class MyPageView
{
[UIHint("List")]
public IList<IOption> OptionList { get; set; }
}
,然后在您的视图:
@model IList<RoomWanted.FlatShare.Services.ViewModels.Options.IOption>
@for (int i = 0; i < Model.Count; i++)
{
@Html.HiddenFor(x => x[i].Id)
@Html.HiddenFor(x => x[i].Name)
}
+0
这将工作,如果我会直接在视图中使用它,因为你正在显示。但我在我的主视图中使用'@ Html.EditorFor(m => m.OptionList)'(因为列表不止一个),这些命令使用'List'模板。也许有人以其他方式如何实现功能而不失去灵魂的灵活性?但无论如何感谢您的帖子。 – 2013-03-19 20:22:29
我从来没有理由保存隐藏输入字段的集合。你有什么理由这样做? – Elisabeth 2013-03-17 15:51:58
除了填充隐藏的输入字段,我实际上是使用帮助器Html.DropDownListFor()填充
实际用途是我想为'IEnumerable OptionList'编写自定义的服务器端验证器,所以我需要将数据绑定回模型。 –
2013-03-17 18:22:27