asp.net mvc checkbox / привязка модели матрицы радиокнопки - PullRequest
1 голос
/ 22 марта 2011

У меня есть динамические формы со списками и матрицами флажков / переключателей:

checkbox & radio-button lists

Следующий код отображает список флажков:

@foreach (var sq in Model.SubQuestions)
{
    <label>
        <input type="hidden" name="answerResult.index" value="@sq.Id" />
        <input type="checkbox" name="answerResult[@sq.Id].SubQuestionId" value="@sq.Id" />
        @sq.Label.Name
    </label>
}

список радиокнопок:

<input type="hidden" name="answerResult.index" value="@Model.Id" />
@foreach (var sq in Model.SubQuestions)
{
    <label>
        <input type="radio" name="answerResult[@Model.Id].SubQuestionId" value="@sq.Id" />
        @sq.Label.Name
    </label>
}

Мое POST-действие в контроллере:

[HttpPost]
public ActionResult PassageSurvey(int surveyId, int surveyPageIndex, IList<AnswerResult> answerResult)

где IList<AnswerResult> - это автоматически связанная коллекция из моей формы. Я получаю только предметы, которые были проверены / выбраны. Все идет хорошо.

Теперь мне нужно получить ту же коллекцию из матриц переключателей / переключателей.

checkbox & radio-button matrices

Матрица радиокнопок:

<table width="100%">
    <tr>
        <th></th>
        @foreach (var av in Model.AnswerVariants)
        {
            <th style="text-align: center;">
                <label>@av.Label.Name</label>
            </th>
        }
    </tr>

    @foreach (var sq in Model.SubQuestions)
    {
        <tr>
            <td>
                <label>@sq.Label.Name</label>
                <input type="hidden" name="answerResult.index" value="@sq.Id" />
                <input type="hidden" name="answerResult[@sq.Id].SubQuestionId" value="@sq.Id" />
            </td>

            @foreach (var av in Model.AnswerVariants)
            {   
                <td align="center">
                    <input type="radio" name="answerResult[@sq.Id].AnswerVariantId" value="@av.Id" />
                </td>
            }
        </tr>
    }
</table>

Флажок матрицы:

<table width="100%">
    <tr>
        <th></th>
        @foreach (var av in Model.AnswerVariants)
        {
            <th style="text-align: center;">
                <label>@av.Label.Name</label>
            </th>
        }
    </tr>

    @foreach (var sq in Model.SubQuestions)
    {
        <tr>
            <td>
                <label>@sq.Label.Name</label>
            </td>
            @foreach (var av in Model.AnswerVariants)
            {   
                <td align="center">
                    <input type="hidden" name="answerResult.index" value="@sq.Id" />
                    <input type="hidden" name="answerResult[@sq.Id].AnswerVariantId" value="@sq.Id" />
                    <input type="checkbox" name="answerResult[@sq.Id].SubQuestionId" value="@sq.Id" />
                </td>
            }
        </tr>
    }
</table>

POST-действие в контроллере всегда одинаково. Теперь из матрицы переключателей (в текущем примере 3x3) IList<AnswerResult> всегда получает 3 элемента, в зависимости от элементов, которые были выбраны в строках и столбцах. Но из матрицы флажков (3x3) IList<AnswerResult> всегда получает все 9 элементов (независимо от того, какие элементы были проверены, скрытые входы всегда имеют значения)

Но я хочу получить только те элементы, которые были проверены. Как изменить шаблон матрицы чекбокс для решения этой проблемы?

1 Ответ

1 голос
/ 21 апреля 2011

Наконец я решил решить эту проблему в своем пост-действии. Удаление элементов (флажков), которые не были выбраны и имеют поля nulls в answerResult[##].SubQuestionId.

...