динамически добавлять EditorTemplates на текущую страницу при изменении выпадающего списка - PullRequest
2 голосов
/ 12 января 2012

В настоящее время у меня есть мастер 3 шагов.

Шаг 1: содержит некоторые необходимые мне данные и имеет раскрывающийся список , где вы выбираете количество пакетов

Шаг 2: в зависимости от того, сколько пакетов вы выбрали, на этом шаге показано необходимое количество редакторов для пакетов

Шаг 3: подтверждение заказа

Мне сказали, что мне нужно объединить шаги 1 и 2, но я не знаю, как это сделать с помощью mvc и бритвы, потому что это просто ВИД на вашу модель ...

Каков наилучший способ сделать это?

Это будет случай отправки страницы обратно на себя с выделенным действием, указывающим, сколько пакетов требуется, или это можно сделать с помощью ajax?

Спасибо

1 Ответ

2 голосов
/ 12 января 2012

Мой подход будет следующим:

Создание частичного для строки пакета (PackageRow.cshtml)

@model IEnumerable<PackageViewModel>
<div class="editorRow">
@using (Html.BeginCollectionItem("packages"))
{
    @Html.TextBoxFor(x => x.WhateverYouNeed) 
}
</div>

Загрузка строк вашего пакета в форму через ajax после выбора пользователем количества строк

@Html.ActionLink("Go!", "AddPackages", null, new { id = "addPackages" })

<div id="editorRows"></div>

<script type="text/javascript">
$(document).ready(function () {
        $("#addPackages").click(function () {
            $.ajax({ url: this.href, cache: false, success: function (html) {
                $("#editorRows").append(html); // add the number of rows you need here
            }
            }); return false;
        });
        $("a.deleteRow").live("click", function () { $(this).parents("div.editorRow:first").remove(); return false; });
    });  
</script>   

Добавьте ваши частичные формы в ваш контроллер

public ActionResult AddPackages()
{
    return PartialView("PackageRow", new PackageViewModel { ... });
}

Сохранить данные

 [Authorize]
 [HttpPost]
        public ActionResult CreatePackages(int id, FormCollection fc)
        {

            int nrKeys = fc.AllKeys.Count();
            int i = 0;

            int interations = (nrKeys / 2);

            foreach (var key in fc.AllKeys)
            {

                if (nrKeys <= i)
                    break;

                if (i != 0)
                {
                    string value1 = fc[i];
                    string value2 = fc[i + 1];
                   ...
                }
                else
                {
                    i++;
                }

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