asp.net-mvc – MVC ajax json post到控制器动作方法
我试图实现一个JQuery AJAX调用控制器动作方法,其中包含一个复杂的对象作为参数。
我已经阅读了大量的博客,并尝试了从这些学到的几种技术。我构建了我最好的尝试代码(下面)的关键post是stackoverflow post here 。 我想触发一个异步发布,当用户关闭一个字段时调用[不是一个Form保存帖子 – 如我在其他示例中所示)。 我的目的是: >实例化客户端上的对象(而不是ViewModel,它提供了View的类型); 结果将作为JSON结果返回;并且将根据返回的结果将数据加载到视图中的字段中。 问题是: >如果action方法属于HttpPost属性,则不会调用控制器Action方法(即使AJAX调用类型设置为“POST”)。 希望有人可以帮助。谢谢。代码如下: 客户端js文件 var disputeKeyDataObj = { "InvoiceNumber": "" + $.trim(this.value) + "","CustomerNumber": "" + $.trim($('#CustomerNumber').val()) + "" }; var disputeKeyDataJSON = JSON.stringify(disputeHeadlineData); $.ajax({ url: "/cnr/GetDataForInvoiceNumber",type: "POST",data: disputeKeyDataJSON,dataType: 'json',contentType: "application/json; charset=utf-8",success: EnrichedDisputeKeyData(result) }); Action与Action方法参数关联的类型的过滤器和类 [DataContract] public class DisputeKeyData { [DataMember(Name = "InvoiceNumber")] public string InvoiceNumber { get; set; } [DataMember(Name = "CustomerNumber")] public string CustomerNumber { get; set; } } 控制器上的操作方法 //[HttpPost] [ObjectFilter(Param = "disputeKeyData",RootType = typeof(DisputeKeyData))] public ActionResult GetDataForInvoiceNumber(DisputeKeyData disputeKeyData) { //Blah! //.... return Json(disputeKeyData,JsonRequestBehavior.AllowGet); } 解决方法
下面是我如何得到这个工作。
关键点是: [我知道有一种方法绑定一个对象而不是默认的ViewModel对象,但最终只是填充必要的属性为我的需要,因为我无法得到它的工作] [HttpPost] public ActionResult GetDataForInvoiceNumber(MyViewModel myViewModel) { var invoiceNumberQueryResult = _viewModelBuilder.HydrateMyViewModelGivenInvoiceDetail(myViewModel.InvoiceNumber,myViewModel.SelectedCompanyCode); return Json(invoiceNumberQueryResult,JsonRequestBehavior.DenyGet); } 用于调用此操作方法的JQuery脚本: var requestData = { InvoiceNumber: $.trim(this.value),SelectedCompanyCode: $.trim($('#SelectedCompanyCode').val()) }; $.ajax({ url: '/en/myController/GetDataForInvoiceNumber',type: 'POST',data: JSON.stringify(requestData),contentType: 'application/json; charset=utf-8',error: function (xhr) { alert('Error: ' + xhr.statusText); },success: function (result) { CheckIfInvoiceFound(result); },async: true,processData: false }); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc-3 – .NET MVC 3提交按钮做了不同的
- [译]在Asp.Net Core 中使用外部登陆(google、微
- asp.net-mvc – 如何编辑表格数据(ASP MVC)
- ASP.NET System.Data.EntityClient连接字符串帮助
- asp.net-mvc – 为什么在MVC中传递实体不是一个好
- asp.net – 动态加载控件 – 如何访问Page_Init中
- asp.net-core – ASP.NET核心图像上传和调整大小
- 从主页面注入的客户端脚本块中回弹ASP.NET后运行
- asp.net – 会话变量保存在哪里?
- asp.net – 使用NLog记录当前页面的URL