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

干杯。

+0

我从来没有理由保存隐藏输入字段的集合。你有什么理由这样做? – Elisabeth 2013-03-17 15:51:58

+0

除了填充隐藏的输入字段,我实际上是使用帮助器Html.DropDownListFor()填充

+0

实际用途是我想为'IEnumerable OptionList'编写自定义的服务器端验证器,所以我需要将数据绑定回模型。 – 2013-03-17 18:22:27

使用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