ASP .NET MVC 2 - Как передать объект из View в контроллер с Ajax? - PullRequest
0 голосов
/ 18 февраля 2011

У меня есть объект MainObject со списком объектов, SubObjects, между прочим.Я пытаюсь, чтобы пользователь щелкнул ссылку в представлении, чтобы добавить новый субобъект на страницу.Однако я не могу передать MainObject, с которым я работаю, в метод Action.MainObject, который я в настоящее время получаю, пуст, со всеми его значениями, установленными в нуль.Как отправить в контроллер действие MainObject, которое использовалось для первоначального рендеринга представления?

Соответствующий раздел представления выглядит следующим образом:

    <div class="editor-list" id="subObjectsList">
        <%: Html.EditorFor(model => model.SubObjects, "~/Views/MainObject/EditorTemplates/SubObjectsList.ascx")%>
    </div>
     <%: Ajax.ActionLink("Add Ajax subObject", "AddBlanksubObjectToSubObjectsList", new AjaxOptions { UpdateTargetId = "subObjectsList", InsertionMode = InsertionMode.Replace })%>

Соответствующая функция из контроллера выглядиткак это:

    public ActionResult AddBlanksubObjectToSubObjectsList(MainObject mainobject)
    {
        mainobject.SubObjects.Add(new SubObject());
        return PartialView("~/Views/MainObject/EditorTemplates/SubObjectsList.acsx", mainobject.SubObjects);
    }

1 Ответ

0 голосов
/ 03 марта 2011

Я получил следующее:

Просмотр:

        <div class="editor-list" id="subObjectsList">
            <%: Html.EditorFor(model => model.SubObjects, "~/Views/MainObject/EditorTemplates/SubObjectsList.ascx")%>
        </div>
        <input type="button" name="addSubObject" value="Add New SubObject" onclick="AddNewSubObject('#SubObjectList')" />

Управление:

 public ActionResult GetNewSubObject()
    {
        SubObject subObject= new SubObject();
        return PartialView("~/Views/TestCase/EditorTemplates/SubObject.ascx", subObject);
    }

И, наконец, я добавил этот скрипт JQuery:

   function AddNewSubObject(subObjectListDiv) {
        $.get("/TestCase/GetNewSubObject", function (data) {

            //there is one fieldset per SubObject already in the list,
            //so this is the index of the new SubObject
            var index = $(subObjectListDiv + " > fieldset").size();

            //the returned SubObject prefixes its field namess with "[0]."
            //but MVC expects a prefix like "SubObjects[0]" - 
            //plus the index might not be 0, so need to fix that, too
            data = data.replace(/name="\[0\]/g, 'name="SubObject[' + index + "]");

            //now append the new SubObject to the list
            $(subObjectListDiv).append(data);
        });
    }

Если у кого-то есть лучший способ сделать это, чем добавление синтаксиса MVC для вложенных объектов в возвращенное представление с использованием JQuery, пожалуйста, опубликуйте его;Мне бы хотелось верить, что есть лучший способ сделать это.Пока я принимаю мой ответ.

...