【发布时间】:2017-04-19 15:48:03
【问题描述】:
正在开发 MVC 5 应用程序。
我有一张有一堆列的表。一列包含项目的单选按钮列表。由于这是一个“编辑”视图,我需要正确地预先填充选定的单选按钮。 (即选择数据库中的项目)
我的控制器代码的一部分...
newVmRecord.SurveyAnswerOption =
new SelectList(db.SurveyAnswerOptions,
"AnswerOptionText", "AnswerOptionText", ar.SurveyAnswer);
这是剃须刀:
@foreach (SelectListItem item in
(IEnumerable<SelectListItem>)Model[i].SurveyAnswerOption)
{
@Html.RadioButtonFor(modelItem => Model[i].SelectedSurveyAnswer,
Model[i].SurveyAnswerOption, new { @Checked =
Model[i].SelectedSurveyAnswer}) @item.Text
}
可用选项为“是”、“否”和“不适用”。例如,在数据库中,如果已选择“否”,则应在加载此视图时预先选择它。单选按钮显示正确,但 @Checked 无法正常工作。
顺便说一句,我确定有现有数据,因为我把这行代码作为第一行 foreach....
@Html.DisplayTextFor(modelItem => Model[i].SelectedSurveyAnswer);
有什么建议吗?谢谢!
【问题讨论】:
-
您是否确认正在填充 ar.Survey 并且没有选角问题(即真/假、是/否、1/0)?
-
@KevinRaffay 是的。有数据。我尝试在 foreach 的第一行添加它并显示数据:@Html.DisplayTextFor(modelItem => Model[i].SelectedSurveyAnswer);
-
好吧,如果 @checked 被翻译成 html 上的
checked属性......它应该只接受单词checked或 ' '......那么@Html.RadioButtonFor(modelItem => Model[i].SelectedSurveyAnswer, Model[i].SurveyAnswerOption, new { @Checked = Model[i].SelectedSurveyAnswer == "yes" ? "checked" : ""}呢 -
我同意大卫的观点——我记得“checked”是属性。
-
实际上,你甚至不想要
checked="",因为仅仅拥有checked属性会使一些浏览器检查单选按钮,所以使用上面大卫的例子,最后一个单选按钮会变成检查,不管哪个有checked="checked"。单选按钮的这种混乱是我通常选择下拉菜单的原因。快速fiddle 进行说明。
标签: c# asp.net-mvc razor