1

各カテゴリを表すこのViewModelがあり、プロジェクトにはいくつかのサブカテゴリがあります。

public class Categories
{
    //a simple string for the category name
    [Required]
    public string Cat_Name { get; set; }

    //a list of strings for the sub-categories
    public List<string> SubCat_Name { get; set; }
}

このモデルをビューに渡し、それを使用して次のようなフォームを作成します。

@using (Html.BeginForm("Category", "Admin", FormMethod.Post))
{
    @Html.TextBoxFor(m => m.Name, new { @class = "Cat" })

    @Html.TextBoxFor(m => m.SubName, new { @class = "Sub" })

    @Html.TextBoxFor(m => m.SubName, new { @class = "Sub" })

    @Html.TextBoxFor(m => m.SubName, new { @class = "Sub" })

    @Html.TextBoxFor(m => m.SubName, new { @class = "Sub" })

    <input type="button" value="Create New Category" name="Category" onclick="DoIt()" />
}

ご覧のとおり、JavaScript関数 " DoIt()"は、入力ボタンをクリックすることで呼び出されます。これが関数です:

function DoIt() {
    var stringArray = new Array();
    //I put all of the sub-categories inside an array, to be like a list<string>

    $(".Sub").each(function (index, value) {
        stringArray[index] = this.value;
    });

    $.ajax({
        url: '/Admin/Category',
        type: "POST",
        data: JSON.stringify($(".Cat").attr("value") , stringArray),
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        success: function () { console.log("post done"); },
        error: function () { }
    });
}

ご覧のとおり、ajaxメソッドでは、「カテゴリ名」$(".Cat").attr("value")とその「サブカテゴリ名」を、以前にビューモデルとして作成したデータ型をstringArray必要とする対応するアクションメソッドに渡そうとしています。Categories次のようになります。

public ActionResult Category(Categories CAT)
{
    //Do something
    return View();
}

問題は、ajaxメソッドが2つのデータ型を一度に投稿できないこと、またはそれを行う方法がわからないことです。

私もこれを試しました:

var postdata = {
    Name: $(".Cat").attr("value"),
    SubName: stringArray
};

代わりにpostdata中に入れてください。JSON.stringify()しかし、それでもアクションメソッドには何も渡されません。

4

2 に答える 2

1

次のような形式のデータを送信してみてください。

  $.ajax({
        url: '/Admin/Category',
        type: "POST",
        data: JSON.stringify({ Cat_Name: $(".Cat").val(), SubCat_Name: stringArray }),
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        success: function () { console.log("post done"); },
        error: function () { }
    });
于 2012-08-10T14:53:51.520 に答える
1

私はあなたがとても近いと思います。

これを試して

var postdata = {
    Cat_Name: $(".Cat").val(),
    SubCat_Name: stringArray
};

&

$.ajax({
        url: '/Admin/Category',
        type: "POST",
        data: JSON.stringify(CAT:postdata),
        dataType: "json",
        contentType: "application/json",
        success: function () { console.log("post done"); },
        error: function () { }
    });
于 2012-08-10T18:52:43.137 に答える