当我对单选按钮进行分组时,所选的值不会被回发,
所以,使用这个,SelectedQuestionId 是空白
<div class="row">
<div class="col-md-4">
<div class="form-group">
@Html.HiddenFor(x => x.UserResponses[0].QuestionId)
@Html.RadioButtonFor(x => x.UserResponses[0].SelectedQuestionId, Model.UserResponses[0].QuestionId, new { Name ="selectone"})
@Html.DisplayTextFor(x => x.UserResponses[0].QuestionText)
@Html.HiddenFor(x => x.UserResponses[0].QuestionText)
@Html.HiddenFor(x => x.UserResponses[0].InputType)
@Html.HiddenFor(x => x.UserResponses[0].Points)
</div>
</div>
<div class="col-md-4">
<div class="form-group">
<span class="text-muted">@Html.DisplayTextFor(x => x.UserResponses[0].Points)</span> @Html.LabelFor(x => x.UserResponses[0].Points, new { @class = "text-muted" })
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
@Html.HiddenFor(x => x.UserResponses[1].QuestionId)
@Html.RadioButtonFor(x => x.UserResponses[1].SelectedQuestionId, Model.UserResponses[1].QuestionId, new { Name = "selectone"})
@Html.DisplayTextFor(x => x.UserResponses[1].QuestionText)
@Html.HiddenFor(x => x.UserResponses[1].QuestionText)
@Html.HiddenFor(x => x.UserResponses[1].InputType)
@Html.HiddenFor(x => x.UserResponses[1].Points)
</div>
</div>
<div class="col-md-4">
<div class="form-group">
<span class="text-muted">@Html.DisplayTextFor(x => x.UserResponses[1].Points)</span> @Html.LabelFor(x => x.UserResponses[1].Points, new { @class = "text-muted" })
</div>
</div>
</div>
但是,当我从radiobutton中删除分组时,一切运行良好,并且SelectedQuestionId填充了questionid。因此,用这些替换上面的RadioButtonFor允许在发布表单时填充SelectedQuestionId。 上面的代码基于此question,虽然我已经提出了相关问题here - 但这个问题完全是分开的。
@Html.RadioButtonFor(x => x.UserResponses[0].SelectedQuestionId, Model.UserResponses[0].QuestionId)
@Html.RadioButtonFor(x => x.UserResponses[1].SelectedQuestionId, Model.UserResponses[1].QuestionId)
答案 0 :(得分:0)
找到了解决这个相当棘手的问题的方法。
@Html.RadioButtonFor(x => x.UserResponses[0].SelectedQuestionId, Model.UserResponses[0].QuestionId)
@Html.RadioButtonFor(x => x.UserResponses[1].SelectedQuestionId, Model.UserResponses[1].QuestionId)
每个单选按钮上面的代码在反序列化过程中都有一个唯一的名称,如果按照预期选择了给定项目,则会为给定项目填充SelectedQuestionId属性。但是,对于属于一个组的无线电按钮,它们需要具有相同的名称属性,并且由于在上述情况中不是这种情况,因此可以选择两个单选按钮。这也意味着选择了多个单选按钮,所有选定的单选按钮的属性将填充其各自的QuestionId。
为了解决这个问题,总是可以编写代码,
@Html.RadioButtonFor(x => x.UserResponses[0].SelectedQuestionId, Model.UserResponses[0].QuestionId, new { Name = "selectone"})
@Html.RadioButtonFor(x => x.UserResponses[1].SelectedQuestionId, Model.UserResponses[1].QuestionId, new { Name = "selectone"})
而且,现在只能选择一个单选按钮,但是在HttpPost方法的反序列化过程中,集合中每个项目的SelectedQuestionId属性将为null。显然,radiobuttons的名称现在是“selectone”,因此在SelectedQuestionId的键/值配对中,该值不会被填充,换句话说,即使对于所选的单选按钮,SelectedQuestionId也总是为空。
所以,解决方案如下:
@Html.RadioButtonFor(x => x.SelectedId, Model.UserResponses[i].QuestionId)
x.SelectedId位于ParentModel中,并且填充了所选问题的QuestionId,并且由于两个单选按钮共享相同的名称,因此它们属于同一组,因此只有一个单选按钮可以是地选择。