我有这个 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 方法。