根据模型值检查单选按钮

时间:2019-04-04 16:17:19

标签: c# asp.net-mvc

我正在尝试创建一个调查表,以后可以保存并重新访问它,现在用户可以以序列化类的形式保存进入db的值,然后由控制器检索这些值(如果存在)并添加到视图模型中。

调查中的每个问题都有5个可能的答案,这些问题是使用视图模型内列表中的foreach循环生成的。

我要弄清楚的是如何做到这一点,以便如果保存的答案的视图模型列表不为null,则自动检查与数据库中保存的值相对应的单选按钮。

我环顾了与此类似的其他帖子,它们仅处理是/否按钮,但是我需要它比较Model.SavedAnswers [i] .Value中的单选按钮值,并检查是否同样,这可能吗?

下面关于生成问题的foreach结构的示例代码。保存的值存储在一个List中,AnswerModel包含一个称为value的属性,该属性将与单选按钮的值进行比较。

@foreach (Question m in Model.Questions)
{
    <tr style="background-color: #f1f1f1">
        <td colspan="5">
            @count @m.QuestionText
            @Html.Hidden("Answers[" + (count - 1) + "].QuestionNumber", m.QuestionNumber) 
        </td>
    </tr>
    <tr style="background-color: #fff">
        <td>
            @Html.Label("Strongly Agree")
            @Html.RadioButton("Answers[" + (count - 1) + "].Value", "0", new { id = m.QuestionNumber }) 
        </td>
        <td>
            @Html.Label("Agree")
            @Html.RadioButton("Answers[" + (count - 1) + "].Value", "1", new { id = m.QuestionNumber })
        </td>
        <td>
            @Html.Label("Neither agree nor disagree")
            @Html.RadioButton("Answers[" + (count - 1) + "].Value", "2", new { id = m.QuestionNumber })
        </td>
        <td>
            @Html.Label("Disagree")
            @Html.RadioButton("Answers[" + (count - 1) + "].Value", "3", new { id = m.QuestionNumber })
        </td>
        <td>
            @Html.Label("Strongly Disagree")
            @Html.RadioButton("Answers[" + (count - 1) + "].Value", "4", new { id = m.QuestionNumber })
        </td>
        <td>
            @Html.Label("Don't Know")
            @Html.RadioButton("Answers[" + (count - 1) + "].Value", "5", new { id = m.QuestionNumber })
        </td>
    </tr>
    <tr class="separator" />
    count++;
}

1 个答案:

答案 0 :(得分:0)

查看您的代码,我假设这是Question

的类
public class Question
{
    public int QuestionNumber { get; set; }
    public int? Value { get; set; }
}

实际上,您需要的是另一个属性来跟踪先前的值,您可以将其与在控制器中获取帖子时进行比较,例如:

public class Question
{
    public int QuestionNumber { get; set; }
    public int? Value { get; set; }
    public int? PreviousValue { get; set; }
}

然后在您的视图文件中,您将需要一个隐藏字段,以确保当表单回发到控制器时,当前值将绑定为先前的值,如下所示:

@Html.Hidden("Answers[" + (count - 1) + "].PreviousValue", m.Value) 

这就是您所需要的,但是当您的视图呈现单选按钮始终为空(即不反映当前值)时,您可能会发现有些奇怪。这是因为在您的所有@Html.RadioButton()中,您没有将另一个重载用于RadioButton(string name, object value, bool isChecked)。因此,您将需要更改所有@Html.RadioButton()以包括第三个参数,该参数指示在单选按钮为true时将被选中。示例:

@Html.RadioButton("Answers[" + (count - 1) + "].Value", "0", new { id = m.QuestionNumber }, m.Value == 0)

当第三个参数m.Value == 0返回true时,该复选框将显示为选中状态。