Добавить содержимое динамической формы в MVC - PullRequest
4 голосов
/ 20 декабря 2010

Я пытаюсь добавить динамическое содержимое в мое приложение mvc.

Я использую сообщение Стивена Сандерсона Редактирование списка переменной длины в стиле ASP.NET MVC 2 , и благодаря этому у меня появилось некоторое динамическое содержимое. Из-за некоторых ограничений моего приложения мне пришлось внести изменения в базовый класс Gift.

Проблема в том, что теперь приложение не работает.

В моей модели: 1010 *

public class Gift
{
    //public string Name { get; set; }
    //public double Price { get; set; }

    public List<string> MyList { get; set; }
}

А теперь я получаю нулевые значения в параметре подарков

[HttpPost]
public ActionResult Index(IEnumerable<Gift> gifts)
{
    return View("Completed", gifts);
}

Может кто-нибудь помочь мне в этом?

EDIT: Вот мой код просмотра:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<Enviro2011.Models.Gift>>" %>

<asp:Content ContentPlaceHolderID="HeadContent" runat="server">
    <link rel="Stylesheet" href="../../Content/styles.css" />
    <script type="text/javascript">
        $(document).ready(function () {

            $("#addItem").click(function () {
                $.ajax({
                    url: this.href,
                    cache: false,
                    success: function (html) { $("#editorRows").append(html); }
                });
                return false;
            });

            $("a.deleteRow").live("click", function () {
                $(this).parents("div.editorRow:first").remove();
                return false;
            });
        });
    </script>
</asp:Content>
<asp:Content ContentPlaceHolderID="MainContent" runat="server">
    <h2>
        Gift List</h2>
    What do you want for your birthday?
    <% using (Html.BeginForm())
       { %>
    <div id="editorRows">
        <% foreach (var item in Model)
               Html.RenderPartial("GiftEditorRow", item);
        %>
    </div>
    <%: Html.ActionLink("Add another...", "Add", null, new { id = "addItem" }) %>
    <input type="submit" value="Finished" />
    <% } %>
</asp:Content>

Edit2 Я также обнаружил сообщение Привязка модели к списку от Фила Хаака, и он работает просто отлично, но я не могу реализовать функцию «Добавить книгу» !!!

Ответы [ 2 ]

5 голосов
/ 30 декабря 2010

Проблема в том, что вы просматриваете модель, а не элементы в модели.

Вот что вы можете сделать:

<% foreach (var item in Model.MyList)  // <-- Add the ".MyList"
       Html.RenderPartial("GiftEditorRow", item);
%>

МыПредположим, что ваше частичное представление получает только строку.

Поскольку ваш вызов Ajax не работает, проблема в том, что вы пытаетесь отправить дважды, один раз с помощью actionLink, а другой - с помощью Ajax.Измените ActionLink на явную ссылку без каких-либо действий:

<a id="addItem">Add another ...</a>

Тогда ваш вызов jQuery Ajax сработает.

0 голосов
/ 25 декабря 2010

Есть ли у вас действия ниже в вашем контроллере

public ActionResult Add ()
{
return View ("GiftEditorRow", new MyList ());
}

...