[英]Send object to controller through ajax call
我必须将一个对象从视图页面发送到控制器。
Ajax代码:-
var jsdata = '{p:' + data + '}';
$.ajax({
type: "POST",
url: rootURL + "Deal/Check",
contentType: 'application/json; charset=utf-8',
data:JSON.stringify(jsdata, null, 2) ,
success: function (data) {}
});
控制器:
[HttpPost]
public async Task<ActionResult> Check(DealCreateViewModel p)
{
CheckAvailabilities(p);
return View();
}
DealCreateViewModel:-
public List<AllocationID> Titles { get; set; }
public List<AllocationID> Episodes { get; set; }
[UIHint("MultiPicker")] public List<AllocationID> Assets { get; set; }
[UIHint("MultiPicker")] public List<QuickID> Documents { get; set; }
[UIHint("MultiPicker")] public List<AllocationID> Languages { get; set; }
[UIHint("MultiPicker")] public List<AllocationID> Territories { get; set; }
[UIHint("MultiPicker")] public List<AllocationID> Countries { get; set; }
[UIHint("MultiPicker")] public List<AllocationID> Rights { get; set; }
[UIHint("MultiPicker")] public List<AllocationID> Contributors { get; set; }
[UIHint("MultiPicker")] public List<AllocationID> Transmissions { get; set; }
我通过ajax发送的对象“数据”可以是任何东西,意味着它可以是资产列表,标题列表,情节列表或Viewmodel中的任何其他内容。
尝试下面的代码
$.ajax({
type: "POST",
url: rootURL + "Deal/Check",
contentType: 'application/json; charset=utf-8',
dataType:'json',
data: { p : data },
success: function (data) {}
});
您可以将其作为简单的json字符串发送。 但是,您将不知道对象的类型或对象的类。 因此,我们必须指定类型以及传递给action方法的json字符串。 在您的情况下,您需要指定列表类型 (AllocationID,QuickID)和对象类 (Document,Location等)。
因此示例json看起来像:
var jsdata = {
"listType": "AllocationID",
"objectName" : "Documents",
"data": [
//list of json object representing a document.
]
};
var dto = { jsonData: jsData };
$.ajax({
type: "POST",
url: rootURL + "Deal/Check",
data:JSON.stringify(dto),
success: function (data) {}
});
您的操作方法如下所示:
[HttpPost]
public async Task<ActionResult> Check(string jsonData)
{
//use newtonsoft json parser
JObject obj = JObject.Parse(jsonData);
var listType = obj["listType"].Value<string>();
if(listType == 'AllocationID')
{
var jarr = obj["data"].Value<JArray>();
List<AllocationID> documents = jarr.ToObject<List<AllocationID>>();
//do something with documents list...
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.