Пройдите модель несколько раз в ASP.NET MVC 3 - PullRequest
2 голосов
/ 07 марта 2012

Я хочу сделать что-то вроде анкеты с разными разделами.Поэтому я создал Index.cshtml, который включает в себя соответствующее частичное представление (в зависимости от числа, которое имеет мое step-integer).Что-то вроде

@using (Html.BeginForm())
{
        @Html.Partial("Step" + Model.Step, Model)
        <p>
            @if (Model.Step > 1)
            {
                <button name="button" value="Zurück" />
            }
            <input type="submit" value="Weiter" />
        </p>
}

Как вы, возможно, уже заметили, он будет искать что-то вроде «Step1.cshtml» и т. Д., Где расположена соответствующая маска ввода, например

@model CVGen.Models.InputModel
<div class="editor-field">
    @Html.TextBoxFor(model => model.Anrede)
    @Html.ValidationMessageFor(model => model.Anrede)
</div>

Моя модель содержит свойства всей анкеты, поэтому, конечно, я хочу каждый раз передавать всю модель на следующий шаг / просмотр (и если я вернусь, модель также должна быть возвращена, чтобы информация оставалась там).и пользователь может редактировать его).Но это просто не сработает для меня.Мой контроллер выглядит примерно так:

public ActionResult Index()
{
    InputModel model = new InputModel();

    return View(model);
}

[HttpPost]
public ActionResult Index(InputModel model)
{
    model.Step++;
    return View(model);
}

Также мое свойство model.Step всегда равно 0 (или 1, после того, как 1 добавлено в HttpPost), что, конечно, потому что моя модель не будет переданаво второй раз.

Есть предложения?

1 Ответ

4 голосов
/ 07 марта 2012

может стоить просмотреть предыдущие примеры блогов на эту тему (а также несколько здесь, на SO):

В двух словах, я бы сделал что-то вроде следующего, независимо от того, разрешен ли jQuery / javascript:

  • Создайте модель, которая содержит ALL полей, требуемых мастером.
  • Создание контроллера NEW (для шагов мастера)
  • Создать одно действие для каждой страницы мастера (опять же, все действия должны использовать одну и ту же модель мастера)
  • Создайте SAVE действие в конце процесса, которое сохраняет все в базу данных.

Кроме того, в приведенном выше примере вы не включаете «шаг» в представление внутри тегов формы. Это потребуется при обратной передаче. Вы должны добавить что-то вроде:

@Html.HiddenFor(model => model.Step)

Ваш пробег может варьироваться - удачи

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