1
使用编辑器创建模板单选按钮组

我有以下型号如何剃刀

public class FilterSetting 
{ 
    public FilterType Type { get; set; } 
    public ShowOption Option { get; set; } 
    public bool IsMultiple { get; set; } 
    public List<int> SelectedValues { get; set; } 
    public List<SelectListItem> Values { get; set; } 
    public int RowCount { get; set; } 
} 
public enum ShowOption 
{ 
    Common, 
    Also, 
    All 
} 

我想创建为ShowOption枚举一个单选按钮组,但我想用编辑器显示该组模板,因为我有另一个模型创建一个FilterSetting的列表,它将显示大约7个FilterSettings,每个模型都必须有一组ShowOption属性的3个单选按钮。

问题是,当剃须刀从编辑器模板呈现单选按钮时,它为每个单选按钮(name =“filter.Option”)使用相同的名称,我不知道如何设置值。

这是我的编辑模板

@model Models.FilterSetting 


@Html.RadioButtonFor(f => f.Option, "Common", new { id = ""+ Model.Type }) 
@Html.Label(""+Model.Type, "Show only common assets") 
<br /> 
@Html.RadioButtonFor(f => f.Option, "Also", new { id = "" + Model.Type }) 
@Html.Label(""+Model.Type, "Also show assets matching the values selected below") 
<br /> 
@Html.RadioButtonFor(f => f.Option, "All", new { id = "" + Model.Type }) 
@Html.Label(""+Model.Type, "Show all assets") 
<br /> 


@if (Model.IsMultiple) 
{ 
    @Html.ListBoxFor(f => f.SelectedValues, Model.Values) 
} 
else 
{ 
    @Html.DropDownListFor(f => f.SelectedValues, Model.Values, new { size = "4" }) 
} 

我试图通过名称上htmlAttributes对象,但它不工作。

编辑: 显然问题是我叫我编辑的方式。 我打电话就这样

@foreach (var filter in Model.FilterSettings) 
{ 
     .... 
     @Html.EditorFor(f => filter) 
} 

当我这样称呼它

@Html.EditorFor(f => f.filterSettings) 

单选按钮正常工作。当我为每个人做什么时会发生什么?

感谢您的帮助!

回答

1

当您为集合调用Editor/EditorFor时,Razor将跟踪生成的名称和ID,因此您将得到如前例所生成的名称。 Addresses[0].Line1,Addresses[1].Line1 ...

但是,当你迭代你自己的集合,并调用每个模型剃须刀的编辑器不要保留名称和id的轨道(它应该是什么?是不会更多复杂?),它被认为是一个新的控件将在页面中呈现。

0

通常我使用@Html.HiddenFor(x => x.id)和@ Html.HiddenFor(x => x.name),试试这个