0

オブジェクトのリストを含むオブジェクトMainObject、SubObjectsなどがあります。ユーザーにビューのリンクをクリックして、ページに新しいサブオブジェクトを追加さ​​せようとしています。ただし、使用しているMainObjectをActionメソッドに渡すことができません。現在受け取っているMainObjectは空で、すべての値がnullに設定されています。ビューを元々レンダリングするために使用された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);
    }
4

1 に答える 1

0

私は次のようになりました:

意見:

        <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を使用して返されたビューに追加するよりも、誰かがこれを行うためのより良い方法を持っている場合は、投稿してください。これを行うためのより良い方法があると信じたいです。今のところ、私は私の答えを受け入れています。

于 2011-03-03T00:22:08.033 に答える