ASP.NET MVC 5 无法在视图上绑定单选按钮列表

ASP.NET MVC 5 Can't bind radio button list on View

我在将模型绑定到视图时遇到问题。当我尝试使用我的问题模型创建单选按钮组时,查看发布每个布尔值 false。

型号

编辑: 将字段更改为 属性。

public class Question
{
    public string Name { get; set; }
    public List<Answer> Answers { get; set; }

    public Question()
    {
        Answers = new List<Answer>();
    }
}

public class Answer
{
    public string AnswerText { get; set; }
    public bool Checked { get; set; }
    public long Id { get; set; }
    public long QuestionId { get; set; }
}

查看

    for (int i = 0; i < Model.Answers.Count; i++)
    {
        @Html.HiddenFor(m => m.Answers[i].Id)
        @Html.HiddenFor(m => m.Answers[i].AnswerText)
        @Html.HiddenFor(m => m.Answers[i].QuestionId)


        @Html.DisplayFor(m => m.Answers[i].AnswerText)
        @Html.RadioButtonFor(m => Model.Name, Model.Answers[i].Checked)
        <br>
    }

编辑:

调试

try this, it will work

      @{ 
      for (int i = 0; i < Model.Answers.Count; i++)
        {
            <div>
                @if(Model.Answers[i].Checked)
                {
                @Html.RadioButtonFor(model => Model.Name,Model.Answers[i].Id, new { id = "answer" +i})
                }

            </div>
        }
    }

RadioButtonFor的第二个参数不是bool表示是否显示select单选按钮。它只是基于此的值:

Html.RadioButtonFor(model => property, object value, object htmlAttributes)

Model => property: it refers to a model property.

Object value: This value will be posted to server if radio button is selected.

所以预计它不会显示为 selected。

你需要做这样的事情:

@for (int i = 0; i < Model.Answers.Count; i++)
{
    @Html.RadioButtonFor(m => Model.Name, Model.Answers[i].Id)
}

这样你就可以将值绑定到 id,当你 post 你将得到正确的 id 来处理。

现在,如果您设置 Model.Name = SomeIdFromAnswers,则相应的单选按钮将被 selected。