【发布时间】:2011-05-06 10:24:49
【问题描述】:
我正在尝试实现对包含复杂对象作为参数的控制器操作方法的 JQuery AJAX 调用。 我已经阅读了很多博客并尝试了从这些博客中学到的几种技术。我构建最佳尝试代码的关键帖子(如下)是 stackoverflow 帖子 here 。
我想触发一个异步帖子,当用户关闭一个字段时调用[不是表单保存帖子——如我发现的其他示例所示]。
我的目的是:
- 在客户端实例化一个对象[不是为视图提供类型的视图模型];
- 用视图中多个字段的数据填充对象;
- 将此对象转换为 JSON;
- 使用 jQuery.Ajax 方法调用控制器操作方法,传递 JSON 对象。
结果将作为 JSON 结果返回;并且数据将根据返回的结果加载到视图中的字段中。
问题是:
- 如果 action 方法带有 HttpPost 属性,则不会调用控制器 Action 方法(即使 AJAX 调用类型设置为“POST”)。
- 如果action方法是HttpGet属性,则参数属性值为null
- ReadObject 方法引发错误:“期望来自命名空间 '' 的元素 'root'.. 遇到名为 'namespace' 的 'None'”。
希望有人可以提供帮助。谢谢。代码如下:
客户端 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 方法参数关联的类型的操作过滤器和类
[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);
}
【问题讨论】:
标签: asp.net-mvc ajax json