我有数据模型类如下:
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>
在运行时,所选选项应为黑色。但黄色被选中。如何解决这个问题?
答案 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>