Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 MVC3模型生命周期_Asp.net Mvc 3_Post_Model - Fatal编程技术网

Asp.net mvc 3 MVC3模型生命周期

Asp.net mvc 3 MVC3模型生命周期,asp.net-mvc-3,post,model,Asp.net Mvc 3,Post,Model,我希望有人能澄清模型应该如何通过回发进行,给出以下示例: 我的模型 控制器触发索引视图,传递新模型。默认为选项,默认情况下选择第三个选项。 现在,呈现的表单字段基本上包括整个模型,包括每个RadioButtonListItem的值、文本和组名。 用户填写表单并单击提交按钮。 HttpPost控制器接收模型。该模型是根据发布的数据重新填充的,包括RadioButtonList项及其所有属性。 某些表单条目不正确,因此将同一模型实例发送回视图,这样可以保留用户的条目和选择。 用户修复错误,重新提交表

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

我的模型 控制器触发索引视图,传递新模型。默认为选项,默认情况下选择第三个选项。 现在,呈现的表单字段基本上包括整个模型,包括每个RadioButtonListItem的值、文本和组名。 用户填写表单并单击提交按钮。 HttpPost控制器接收模型。该模型是根据发布的数据重新填充的,包括RadioButtonList项及其所有属性。 某些表单条目不正确,因此将同一模型实例发送回视图,这样可以保留用户的条目和选择。 用户修复错误,重新提交表单,一切正常。 总结 这对我来说似乎很奇怪,因为我真的认为您不应该发回原始元数据,以便可以持久化模型状态。但是如果你不把它寄回去,你会怎么做?我只能想到另一个选项:在回发过程中创建第二个模型实例,并将用户的选择复制到新实例,然后将其反馈到视图


但我觉得这不太对。有人能解释一下这是怎么回事吗?

当我问这个问题时,我没有想清楚。当然,列表中的项目不需要与post数据一起发送回去。您只需在模型中保留一个单独的列表,并在构造函数中初始化该列表,然后拥有一个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编辑器或模板加载列表,然后只发送回所选项目。该值将填充在SelectedItem属性中。

答案可能不是,但可能会有所帮助,请查看此图表,了解asp.net mvc管道
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)
    {
        //...
    }
}
[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; }