0

2 つのモデルがあります。

public class CreateAssignmentViewModel {
    ...
    public List<CreateAssignmentSelectedItem> SelectedItems { get; set; }
}

public class CreateAssignmentSelectedItem {
    ...
}

上記のように、このクラスにはプロパティが含まCreateAssignmentViewModelれていることがわかります。List<CreateAssignmentSelectedItem>

@model Contoso.MvcApplication.Models.Assignment.CreateAssignmentViewModel
@{
    ViewBag.Title = "Create Assignment";
    ...
}

@using (Html.BeginForm()) {
    ...
}

の中でHtml.BeginForm、私は部分的なビューを持っています。その中に、部分ビューを更新する ajax を使用したボタンがあります。

次のイベントを見てください。データの場所: プロパティのみにアクセスするために何を入力すればよいかわかりませんSelectedItems

var addQuestionToAssignmentContent = function (questionId)
{
    $.ajax({
        url: "/Assignment/AddItemToAssignmentContent",
        type: "post",
        data: { model: $(this).serialize() /* HERE I DON'T KNOW TO ACCESS THE */, itemId: questionId },
        success: function (response) {
            var $target = $("#assignmentContent");
            var $newHtml = response;
            $target.replaceWith($newHtml);
        }
    });
};

    public ActionResult AddItemToAssignmentContent(List<CreateAssignmentSelectedItem> model, string itemId)
    {
        ...
        PartialView(..);
    }

メソッドでオブジェクトのみを渡すにはどうすればよいですか?

4

2 に答える 2

3

まず、フォームに ID を与えます。

@using (Html.BeginForm("actionName", "controllerName", FormMethod.Post, new{id = "frmUpdate"})) {

次に、コードを次のように変更します。

var f = $("#frmUpdate");
    $.ajax({
        url: f.attr('action'),
        type: f.attr('method'),
        data: f.serialize(),
        //etc..

私はほとんどの場合これを使用していますが、うまく機能します。データは、更新アクションで持っているモデルに自動的にバインドされます。したがって、たとえば... @modelof 型がある場合MyModel、更新アクションでは次のようになります。

[HttpPost]
public ActionResult Update(MyModel updatedModel)
于 2013-03-13T00:36:26.307 に答える
0

ときどきフロントエンドの担当者と一緒に仕事をすることがありますが、彼は正しいモデルのパスに固執せず、フォーム フィールドなどを変更する可能性があります。この場合、フォームをシリアル化し、任意の方法でアクションに渡すだけです。

次に、FormCollection オブジェクトを使用して、必要なデータを取得します。

あなたのjson呼び出し

var addQuestionToAssignmentContent = function (questionId)
{
    $.ajax({
        url: "/Assignment/AddItemToAssignmentContent",
        type: "post",
        data: { model: $(this).serialize() /* HERE I DON'T KNOW TO ACCESS THE */, itemId: questionId },
        success: function (response) {
            var $target = $("#assignmentContent");
            var $newHtml = response;
            $target.replaceWith($newHtml);
        }
    });
};
Get a form collection object

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult AddItemToAssignmentContent(FormCollection collection)
{
       vars someValue = collection.GetValue("somefield").AttemptedValue;
}

しかし、私があなたのようにフロントエンドを制御できる場合は、Matt が提案したように、モデルにパスを使用する必要があります。

于 2013-03-13T05:25:38.613 に答える