【问题标题】:ASP.NET MVC 5 Can't bind radio button list on ViewASP.NET MVC 5 无法在视图上绑定单选按钮列表
【发布时间】:2019-12-04 20:03:38
【问题描述】:

我在将模型绑定到视图时遇到问题。当我尝试使用我的问题模型创建单选按钮组时,查看发布每个布尔值是否为 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>
    }

编辑:

页面

调试

【问题讨论】:

    标签: c# model asp.net-mvc-5 radio-button boolean


    【解决方案1】:

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

    Html.RadioButtonFor(model =&gt; property, object value, object htmlAttributes)

    Model => property:它指的是一个模型属性。

    对象值:如果选择单选按钮,该值将发布到服务器。

    所以预计它不会显示为选中状态。

    你需要做这样的事情:

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

    这样你会将值绑定到 id,当你发布时你会得到正确的 id 来处理。

    现在如果你设置Model.Name = SomeIdFromAnswers,那么对应的单选按钮就会被选中。

    【讨论】:

    • 我也试过了,但没用i.stack.imgur.com/ISRkD.png。我不能使用复选框之类的单选按钮,难道没有一个属性可以将它们绑定到一个组而不更改名称属性吗?我试图将它们更改为 ChecBoxFor 并使用 jquery 处理它们的值,但它看起来很糟糕。
    • 我在我的主项目的另一个代码块上使用 Model.Name,当我清理我的代码时,我可以通过这个绑定获得选定的答案 ID。感谢您对参数的帮助和解释:)
    【解决方案2】:
    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>
            }
        }
    

    【讨论】:

    • 它没有列出任何单选按钮,因为它们默认为 false,我尝试添加 id 属性但没有用。
    • 您可以通过删除@if(Model.Answers[i].Checked) 进行检查,它会起作用,我已经检查过了。它在我的项目中工作。
    • 当模型进入控制器时,仍然没有将 'Checked' 属性设置为 true。它仅适用于 CheckBoxFor,但我正在尝试创建一个具有多个和单个选择的调查,这取决于一个参数。
    猜你喜欢
    • 1970-01-01
    • 2015-03-19
    • 2013-09-04
    • 2018-11-01
    • 1970-01-01
    • 2017-03-25
    • 1970-01-01
    • 2019-02-24
    • 2019-01-23
    相关资源
    最近更新 更多