Проверка переключателей на основе значений модели - PullRequest
0 голосов
/ 04 апреля 2019

Я пытаюсь создать опрос, который можно сохранить и пересмотреть позже, прямо сейчас пользователь может сохранить значения, которые поступают в БД в виде сериализованного класса, затем они получаются контроллером. (если они существуют) и добавлены в модель представления.

На каждый вопрос в опросе есть 5 возможных ответов, и вопросы генерируются с использованием цикла foreach из списка в модели представления.

Я пытаюсь выяснить, как сделать так, чтобы, если список представленных моделей просмотра ответов не был нулевым, то автоматически устанавливался переключатель, соответствующий значению, сохраненному в БД.

Я просмотрел другие записи, похожие на это, и они имеют дело только с кнопками Да / Нет, однако мне нужно, чтобы он сравнивал значение переключателя в Model.SavedAnswers [i]. Значение и проверял, если они ' то же самое, возможно ли это?

Пример кода ниже относительно структуры моего foreach, который генерирует вопросы. Сохраненные значения хранятся в списке, а 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 голосов
/ 08 апреля 2019

Глядя на ваш код, я предполагаю, что это класс 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(), чтобы включить третий параметр, который указывает, что переключатель будет проверен, когда он истинен. Пример:

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

когда третий параметр m.Value == 0 вернет true, будет отображаться флажок как проверенный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...