我希望有人可以通过以下示例澄清模型应该如何通过回发进行:
public class MyModel
{
public string Text { get; set; }
public List<RadioButtonListItem> Options { get; set; }
public MyModel()
{
//Initialize the options.
this.Options = new List<RadioButtonListItem>()
{
//Setting Text, Value and Group Name. 3rd is selected by default.
new RadioButtonListItem("Item 1", "1", "Options"),
new RadioButtonListItem("Item 2", "2", "Options"),
new RadioButtonListItem("Item 3", "3", "Options", true)
};
}
}
public class RadioButtonListItem
{
[HiddenInput]
public string Value { get; set; }
[HiddenInput]
public string Text { get; set; }
[HiddenInput]
public string GroupName { get; set; }
[HiddenInput]
public string SelectedValue { get; set; }
[TemplateVisibility(ShowForEdit = false)]
public override bool Selected { get { return string.Equals(this.Value, this.SelectedValue); } set { this.SelectedValue = (value ? this.Value : null); } }
public RadioButtonListItem() { }
public RadioButtonListItem(string value, string text, string groupName) : this(value, text, groupName, false) { }
public RadioButtonListItem(string value, string text, string groupName, bool selected)
{
//...
}
}
这对我来说似乎很奇怪,因为我真的认为你不应该发回原始元数据,以便可以保持模型状态。但如果你不发回去,你会怎么做?我只能想到另一个选项:在回发期间创建第二个模型实例并将用户的选择复制到新实例并将其反馈给视图。
但这对我来说似乎不对。有人可以澄清这应该如何运作吗?
答案 0 :(得分:0)
int
字段,该字段是从列表中选择的项目的ID或键。
该模型如下所示:
[Required]
[DataType("RadioButtonList")]
[Display(Name = "Format", Order = 2)]
[AdditionalMetadata("Style", "Wide")]
[AdditionalMetadata("List", "Items")]
public int? SelectedItem { get; set; }
[TemplateVisibility(ShowForDisplay = false, ShowForEdit = false)]
public List<ListItem> Items { get; set; }
它指向具有AdditionalMetaData
属性的自己的列表。因此,您可以轻松地RadioButtonList EditorTemplate
加载列表,然后发回选择的项目。该值将填充在SelectedItem
属性中。