各カテゴリを表すこの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()
しかし、それでもアクションメソッドには何も渡されません。