为什么运行时选中的单选按钮与我的程序设置不同?

时间:2011-02-04 09:39:58

标签: asp.net-mvc

我有数据模型类如下:

public class QuizItem
    {
        public int QuizItemId { get; set; }
        public string Question { get; set; }
        public IEnumerable<Choice> Choices { get; set; }
    }

 public class Choice
    {
        public int ChoiceId { get; set; }
        public string Description { get; set; }
        public bool IsCorrect { get; set; }
    }

我在控制器操作中进行了如下设置:

public class HomeController : Controller
    {
        public ActionResult Index()
        {
            IEnumerable<Choice> choices = new Choice[]
            {
                new Choice{ChoiceId=1,Description="Black",IsCorrect=true},
                new Choice{ChoiceId=2,Description="Red",IsCorrect=false},
                new Choice{ChoiceId=3,Description="Yellow",IsCorrect=false}
            };

            QuizItem qi = new QuizItem { QuizItemId = 1, 
                Question = "What color is your hair?",
                Choices = choices };

            return View(qi);
        }

最后,这是我的观点:

@model MvcApplication1.Models.QuizItem
@{
    ViewBag.Title = "Index";
}
<h2>
    Index</h2>
<fieldset>
    <legend>QuizItem</legend>
    <div class="display-label">
        Question</div>
    <div class="display-field">@Model.Question</div>

        @foreach (var x in Model.Choices)
        {
            <text>@Html.RadioButtonFor(y => Model.QuizItemId, x.Description, new { @checked = x.IsCorrect })
                @x.Description<br /></text>
        }

</fieldset>

在运行时,所选选项应为黑色。但黄色被选中。如何解决这个问题?

enter image description here

4 个答案:

答案 0 :(得分:1)

您需要将@checked属性设置为字符串“checked”,而不是true / false。

new { @checked = x.IsCorrect ? "checked" : string.Empty }

答案 1 :(得分:1)

JK在他出错的同时是正确的。

checked属性应该与“checked”值一起使用,对于已检查的无线电,正确且有效的W3C html标记是:

<input type="radion" name="something" value="1" checked="checked">

但是,输出时:

<input type="radion" name="something" value="1" checked="">

浏览器仍然将其呈现为已检查的无线电。到目前为止,您自己的解决方案是最好的。

答案 2 :(得分:1)

我发现单选按钮帮助程序太麻烦了,无法正常工作。

最好自己编写单选按钮的原始HTML。当您有多个选项时尤其如此:

<input type="radio" id="ques1_choice1" name="quizQuestion1" value="1" @(x.IsCorrect ? "checked=\"checked\"" : null) />
<input type="radio" id="ques1_choice2" name="quizQuestion1" value="2" @(x.IsCorrect ? "checked=\"checked\"" : null) />

答案 3 :(得分:0)

我发现解决方案如下:

<fieldset>
    <legend>@Model.Question</legend>
    @foreach (var x in Model.Choices)
    {

        <text>@Html.RadioButton(Model.QuizItemId.ToString(), x.Description, x.IsCorrect)
        @x.Description<br /></text>

    }
</fieldset>