ASP.NET MVC и JQuery Динамическая форма содержимого - PullRequest
6 голосов
/ 21 января 2009

Я хотел бы динамически добавлять поля в форму ASP.NET MVC с помощью JQuery.

Пример:

<script language="javascript" type="text/javascript">
    var widgets;

    $(document).ready(function() {
        widgets = 0;
        AddWidget();
    });

    function AddWidget() {
        $('#widgets').append("<li><input type='text' name='widget" + widgets + "'/></li>");
        widgets++;
    }
</script>

<ul id="widgets">
</ul>

Это работает, но я собирался вручную перебрать значения формы в контроллере:

[AcceptVerbs("Post")]
public ActionResult AddWidget(FormCollection form)
{
    foreach (string s in form)
    {
        string t = form[s];
    }

    return RedirectToAction("ActionName");
}

Но мне пришло в голову, когда я отправляю пользователя обратно в Get Action в контроллере, мне нужно будет установить FormData с введенными значениями, а затем итеративно добавить виджеты с помощью <% scripting. </p>

Каков наилучший способ сделать это в текущем выпуске (я полагаю, 5)?

Ответы [ 4 ]

4 голосов
/ 17 мая 2009

Мое решение может быть примерно таким (псевдокод):

<script language="javascript" type="text/javascript">
    var widgets;

    $(document).ready(function() {
        widgets = 0;
        <% for each value in ViewData("WidgetValues") %>
             AddWidget(<%= value %>);
        <% next %>
    });

    function AddWidget( value ) {
        $('#widgets').append("<li><input type='text' name='widget" + widgets + 
                             "'>" + value + "</input></li>");
        widgets++;
    }
</script>

<ul id="widgets">
</ul>

А в контроллере:

[AcceptVerbs("Post")]
public ActionResult AddWidget(FormCollection form)
{
    dim collValues as new Collection;
    foreach (string s in form)
    {
        string t = form[s];
        collValues.add( t )
    }
    ViewData("WidgetValues") = collValues;
    return RedirectToAction("ActionName");
}

Подробности можно узнать позже
(извините за смешивание VB с C #, я парень VB)

0 голосов
/ 13 мая 2009

Я не разработчик ASP.net, но из PHP я знаю, что вы можете использовать массивы в качестве имен для полей ввода

Ex:

<input type="text" name="widgets[]" />
<input type="text" name="widgets[]" />

Затем вы можете перебирать виджеты переменных поста, как если бы это был массив значений.

Нет возни с динамически именованными переменными и т. Д.

0 голосов
/ 16 мая 2009

Насколько я понимаю, проблема в том, чтобы сохранить опубликованные значения в виджетах. Я думаю, что вы можете просто визуализировать тех виджетов, которых вы хотите заполнить на сервере во время рендеринга View.

0 голосов
/ 30 апреля 2009

Я мог бы упустить момент, но нужно ли отправлять данные обратно в контроллер с помощью действия формы? почему бы не сделать вызов ajax с помощью jquery для отправки данных на контроллер ... или, что еще лучше, через веб-сервис? отправьте данные асинхронно, и нет необходимости перестраивать представление с использованием отправленных значений данных.

Это прекрасно работает, если значения используются и никогда не используются снова, однако, если вы планируете сохранить данные и отобразить их через представление, ваша модель должна действительно поддерживать структуру данных. возможно Dictionary<string, string> на модели.

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