@html剃刀单选按钮mvc5(@html razor radio buttons mvc5)

2019-11-02 18:56发布

这里是我的视图模型

public class UserResponseModel
    {
        public string QuestionId { get; set;} 

        public string QuestionText { get; set; }

        public bool IsChecked { get; set; }


    }

所以,对于这个复选框精美作品

for (var i = 0; i < Model.UserResponses.Count; i++)
    {
        <div class="row">
            <div class="col-md-4">
                <div class="form-group">

                    @Html.HiddenFor(x => x.UserResponses[i].QuestionId)
                    @Html.CheckBoxFor(x => x.UserResponses[i].IsChecked) 

但对于单选按钮,这并不

 for (var i = 0; i < Model.UserResponses.Count; i++)
    {
        <div class="row">
            <div class="col-md-4">
                <div class="form-group">

                    @Html.HiddenFor(x => x.UserResponses[i].QuestionId)
                    @Html.RadioButtonFor(x => x.UserResponses[i].IsChecked, new { Name = "grp1" })
                    @Html.DisplayTextFor(x => x.UserResponses[i].QuestionText)

当我提交表单,然后是器isChecked总是假的 - 为什么 - 我失去了什么 - 因为我的复选框提到它工作得很好。 我没有看这个问题, 在这里 ,但我不知道为什么单选按钮需要在视图模型额外的属性,以保持正确的答案时复选框透明地工作。

编辑:我的问题现在模型作为这样

public class QuestionModel
    {
        public string WhichQuestion { get; set; }

        public int PointsObtained { get; set; }

        public bool CorrectAnswer { get; set; }

        private List<UserResponseModel> _userResponse;
        public List<UserResponseModel> UserResponses 
        {
            get { return _userResponse ?? (_userResponse = new List<UserResponseModel>()); }
            set { _userResponse = value; }
        }
    }

请注意,我刚才说公布尔CorrectAnswer {获得; 组; }

在我看来,这里的代码

for (var i = 0; i < Model.UserResponses.Count; i++)
    {
        <div class="row">
            <div class="col-md-4">
                <div class="form-group">

                    @Html.HiddenFor(x => x.UserResponses[i].QuestionId)
                    @Html.HiddenFor(x => x.CorrectAnswer)
                    @Html.HiddenFor(x => x.UserResponses[i].IsChecked)
                    @Html.RadioButtonFor(x => x.UserResponses[i].IsChecked, Model.CorrectAnswer, new { Name = "grp1" })

编辑2:

 @Html.HiddenFor(x => x.UserResponses[i].QuestionId)
                    @Html.HiddenFor(x => x.SelectedAnswerId)
                    @Html.HiddenFor(x => x.UserResponses[i].IsChecked)
                    @Html.RadioButtonFor(x => x.UserResponses[i].IsChecked,    Model.SelectedAnswerId, new { Name = "grp1" })

EDIT3:

public class QuestionModel
    {
        public string WhichQuestion { get; set; }

        public int PointsObtained { get; set; }



        private List<UserResponseModel> _userResponse;
        public List<UserResponseModel> UserResponses 
        {
            get { return _userResponse ?? (_userResponse = new List<UserResponseModel>()); }
            set { _userResponse = value; }
        }
    }

public class UserResponseModel
    {
        public string QuestionId { get; set;} 

        public string QuestionText { get; set; }



        public string SelectedQuestionId { get; set; }

    }

终于,我的看法

for (var i = 0; i < Model.UserResponses.Count; i++)
    {
        <div class="row">
            <div class="col-md-4">
                <div class="form-group">

                    @Html.HiddenFor(x => x.UserResponses[i].QuestionId)
                    @Html.RadioButtonFor(x => x.UserResponses[i].SelectedQuestionId, Model.UserResponses[i].QuestionId, new { Name = "grp1" })
                    @*@Html.CheckBoxFor(x => x.UserResponses[i].IsChecked)*@
                    @Html.DisplayTextFor(x => x.UserResponses[i].QuestionText)

EDIT4:所以最后我得到了一些地方这个作品!

@Html.RadioButtonFor(x => x.UserResponses[i].SelectedQuestionId, Model.UserResponses[i].QuestionId)

我现在可以看到selectedquestionid填充在我httppost方法,但如果我这样做

@Html.RadioButtonFor(x => x.UserResponses[i].SelectedQuestionId, Model.UserResponses[i].QuestionId, new {Name="grp"}) 

然后我虽然只能选择一个单选按钮的selectedquestionid 空的httppost -奇怪

Answer 1:

单选按钮不复选框。 单选按钮进行分组。 这意味着你应该对你的视图模型的单一属性来保存所选择的单选按钮值(如图中answer you linked to )。 随着的复选框,你可以有多个选定复选框,这就是你的,你是他们结合到布尔值的集合在您的视图模型。 在另一方面单选按钮,只有一个可能选择的价值,因为它们是相互排斥的。 这就是为什么他们都应该被绑定到你的视图模型的单一属性,将保持选定的单选按钮值。

因此,在你的问题和答案例如,您有将包含问题的id和文本以及可能的答案列表的问题视图模型。 每个答案将通过ID和文字来表示。 你的问题视图模型也将有一个答案的属性,将举行由用户选择的答案单选按钮。 正是这种特性,你会以你的所有的单选按钮绑定。 但有不同的价值。



文章来源: @html razor radio buttons mvc5