C# 视图中的表单字段如何与模型中的对象关联?

C# 视图中的表单字段如何与模型中的对象关联?,c#,asp.net-mvc,view,model,C#,Asp.net Mvc,View,Model,这是一个由两部分组成的问题。首先,我明白如果在我的模型中使用此选项: [Required(ErrorMessageResourceType = typeof(Resources.CustomerSatisfactionSurvey), ErrorMessageResourceName = "Page1Question1Required")] public int? LikelyToReturn { get; set; } 在我看来: @for (var c = 0; c <

这是一个由两部分组成的问题。首先,我明白如果在我的模型中使用此选项:

    [Required(ErrorMessageResourceType = typeof(Resources.CustomerSatisfactionSurvey), ErrorMessageResourceName = "Page1Question1Required")]
    public int? LikelyToReturn { get; set; }
在我看来:

@for (var c = 0; c < 11; c++)
    {
      @Html.RadioButtonFor(model => Model.LikelyToReturn, @c)
    }
(var c=0;c<11;c++) { @RadioButton(model=>model.LikelyToReturn,@c) } 现在我已经在模型“LikelyToReturn”中的对象和视图中同名的单选按钮组之间创建了关联。当用户选择一个单选按钮并单击“提交”按钮时,模型将更新,并且很可能返回所选值。这种情况发生时,我不必特别削弱这两个人

问题1:如何以及为什么这样做?我认为这与[Required…]标记有关,但我想确定一下

问题2:如何创建与该字段的关联不是必需的?我还有其他模型变量&表单字段,它们有匹配的名称,但不是必需的,并且它们不会自动关联


谢谢

这与您的
[必需]
属性无关。提交表单时,将根据表单控件的
name
属性(
input
select
textarea
元素),将一系列名称/值对发送回控制器方法

在您的例子中,您有一个单选按钮组(您生成的11个控件的值为0-10)。如果选择第三个单选按钮并提交,则发布的表单数据很可能返回:2

在控制器端,
DefaultModelBinder
负责读取表单数据(以及其他值,如路由数据),并将发布的值与模型属性匹配。如果模型包含名为
LikelyToReturn
的属性,则其值将设置为
2

[Required]
属性是一个验证属性,用于验证您的属性。在您的情况下,如果您手动包含一个附加单选按钮

<input type="radio" name="LikelyToReturn" value="" />

并选择它,则验证将失败,因为它将设置
LikelyToReturn=null和一个错误将被添加到
ModelState

如果模型中有其他未绑定的属性,则很可能是因为(1)控件的
name
属性与属性名不匹配,这就是为什么您应该始终使用强类型html帮助程序在表单中生成html的原因,或者(2)您试图绑定到字段而不是属性(即no
{get;set;}