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()" />
}

如您所见,DoIt()单击输入按钮会调用 javascript 函数 " "。这是功能:

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 方法不能同时发布两种数据类型,或者只是我不知道该怎么做。

我也试过这个:

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

并放在postdata里面JSON.stringify()。但是仍然没有任何东西传递给 action 方法。

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 回答