繁体   English   中英

通过ajax调用将对象发送到控制器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM