首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVC3模型生命周期

MVC3模型生命周期
EN

Stack Overflow用户
提问于 2011-09-30 01:01:37
回答 1查看 581关注 0票数 1

我希望有人能够澄清模型应该如何通过回发进行,给出了下面的示例:

MyModel

代码语言:javascript
复制
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)
        };
    }
}

RadioButtonListItem

代码语言:javascript
复制
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)
    {
        //...
    }
}

  1. Controller激发索引视图,传递新模型。选项默认,默认选择第三个选项。现在呈现的表单字段基本上包括整个模型,包括每个RadioButtonListItem.
  2. User的值、文本和组名,然后单击Submit button.
  3. HttpPost控制器接收模型。模型是从发布的数据中重新填充的,包括properties.
  4. Some和它们的所有RadioButtonListItems表单条目都是不正确的,所以相同的模型实例被发送回视图,这样用户的条目和选择就是preserved.
  5. The用户修复了错误,重新提交表单,一切都是好的。

摘要

在我看来,这似乎很奇怪,因为我并不认为您应该返回原始元数据,这样模型状态才能持久。但是如果你不把它送回去,你会怎么做?我只能想到另一个选项:在回发期间,创建第二个模型实例,并将用户的选择复制到新实例并将其反馈到视图中。

但在我看来这不对。有人能澄清一下这是怎么回事吗?

EN

回答 1

Stack Overflow用户

发布于 2011-09-30 13:43:20

当我问这个问题的时候,我没有想清楚。当然,列表中的项目不需要与post数据一起发回。您只需在模型中保留一个单独的列表,然后在构造函数中初始化该列表,然后有一个int字段,该字段是从列表中选择的项的ID或键。

模型如下:

代码语言:javascript
复制
[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属性中填充。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7604973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档