如何通过AJAX将已填充的自定义类从javascript传递到.NETMVC应用程序
How do I get pass a populated custom class from javascript through AJAX to .NET MVC app?
我在c#中有以下.net类:
public class BusinessModel
{
public string BlobName { get; set; }
public string NewName { get; set; }
}
在我的MVC Ajax控制器中,我有以下操作:
[HttpPost]
public ActionResult DoBusiness(string handle, BusinessModel businessData)
{
// Do stuff with the business data.
}
首先,我尝试使用以下Javascript代码来调用它:
var bd = JSON.stringify({ BlobName: "blob", NewName: "new" });
$.ajax({
type: "POST",
url: "/Ajax/DoBusiness",
data: { handle: "MyHandle", businessData: bd },
success: businessComplete,
error: businessFailed
});
在这种情况下,使用fiddler来查看,以下是数据在请求中的呈现方式:
handle=MyHandle&businessData=%7B%22BobName%22%3A%22Bob%22%2C%22NewName%22%3A+22new%22%7D
以下是解码的:
handle=MyHandle&businessData={"blob名称":"blob","NewName":"new"}
但是,当我使用Visual Studio调试器查看实际传递给控制器操作的值时,参数"handle"的值是预期的"MyHandle",但参数"businessData"的值为null。
现在,我将Javascript代码修改为如下(仅删除JSON.stringify调用):
var bd = { BlobName: "blob", NewName: "new" };
$.ajax({
type: "POST",
url: "/Ajax/DoBusiness",
data: { handle: "MyHandle", businessData: bd },
success: businessComplete,
error: businessFailed
});
在这种情况下,数据(由fiddler显示)在请求中呈现为:
handle=MyHandle&businessData%5 blob名称%5D=blob&businessData%5新名称%5D=新
以下是解码的:
handle=MyHandle&businessData[BlobName]=blob&businessData[NewName]=新
在这种情况下,Visual Studio调试器仍然显示"handle"按预期设置为"MyHandle",但"businessData"参数不是null,而是用实际实例填充,但属性"BlobName"answers"NewName"都设置为null。
最后一个问题是:我做错了什么?如何在控制器操作中正确填充该类?
编辑针对可能重复的评论:标题为"通过POST(ajax)发送JSON数据并从Controller(MVC)接收JSON响应"的可能重复特别说明了如何发送与MVC绑定的模型实例。我的问题更多地与可能绑定MVC的对象无关。我很好奇如何填充任意提供的ANY对象。
编辑回应Stephen的评论:这是一个简化的场景。现实生活中的实际用例有一组重叠的Ajax调用,调用这个调用是为了响应前一个调用,该调用传递了在服务器上构建的任意对象,它希望在随后的调用中返回该对象(本例)。在我看来,提供一个充实的现实生活用例会使这个问题变得过于冗长,所以请原谅这种简化,我希望这种解释将有助于适当地构建上下文。
请参阅Stephan Muecke的评论。他给出了至少目前有效的答案。
- MockJax没有在JavaScript应用程序中发送对我AJAX请求的响应
- 如何远程检查JavaScript应用程序的函数调用堆栈
- Windows 8 Javascript应用程序XML对象
- 将javascript应用程序迁移到使用AMD的提示(例如requirejs)
- 如何使用原型继承编写一个整洁灵活的复杂javascript应用程序
- 我如何知道js文件之间的javascript应用程序代码流
- PHP文件没有't从Javascript应用程序获取$_POST
- 在Windows Metro风格的Javascript应用程序中读取文件内容
- 在前端javascript应用程序中使用DI容器有意义吗
- 将一个主要网站转换为javascript应用程序
- 应该如何将密码从纯html/javascript应用程序发送到php页面
- 集成多个JavaScript应用程序
- Windows 8 HTML5 JavaScript 应用程序中向左滑动的事件名称是什么
- 用于组织大型javascript应用程序的工具和最佳实践
- Meteor(JavaScript应用程序平台)|向用户帐户添加数据
- 有没有一种方法可以在IE8中解决我的Rails javascript应用程序.js的问题
- Javascript应用程序作为具有外部依赖关系的AMD模块
- 如何从我的HTML/JavaScript应用程序中引用jQuery
- 基于Rails的javascript应用程序的安全性:如何在渲染的javascript中验证用户的权限
- 使用ajax的javascript应用程序的身份验证模型