我构建了一个JSON对象列表,现在想要传递给ASP.NET MVC2网站。
如果我不使用Web服务,而是使用Controllers / Views,那么输入类型是什么?串?这样做有什么好的做法?
目的是我想使用Microsoft的AJAX框架,这使得没有javascript支持的浏览器仍然能够使用该网站。否则,我会使用jQuery对Web服务进行AJAX调用。
答案 0 :(得分:1)
基本上,支持开箱即用的东西。我没有注册任何 Phil Haack的事情,事情没有问题。默认模型绑定器能够使用传递给服务器的数据。只有当您拥有一个无法真正控制的客户端(或其他服务器端服务)时,才能在服务器上获取JSON字符串。 Phil Haack在this blog post comment中解释得非常好。
考虑这个服务器端应用程序模型:
public class Person
{
[Required]
public string FirstName { get; set; }
[Required]
public string LastName { get; set; }
[Required]
[Range(0, 100)]
public int Age { get; set; }
}
考虑这个控制器(People
控制器)动作:
[HttpPost]
public ActionResult Add(Person data)
{
if (!this.ModelState.IsValid)
{
// do something about invalid data (check "Additional Info" below)
}
Person result = this.Service.Add(data);
return Json(result);
}
此操作将能够使用javascript对象,如:
var person = {
FirstName: "John",
LastName: "Doe",
Age: 35
};
例如,使用jQuery就是这样:
$.ajax({
url: "People/Add",
type: "POST",
data: person,
success: function(data, status, xhr) {
// process data
},
error: function(xhr, status, err) {
// process invalid results
}
});
这不会直接将JSON字符串发送到服务器,但我想知道为什么有人会费心转换为JSON字符串并发送它然后在服务器端进行额外的处理,当你可以使用KISS原则并按照这条路线我这里描述过。即使在MVC 1中它也可以开箱即用。你可以通过你需要的任何东西。列表,数组,对象等。
您可能已经使用真正的Javascript对象/数组构建了JSON字符串。我建议您使用这个原始对象,您已经构建并将其传递给$.ajax
来电。
处理模型状态错误并不像人们想象的那么简单。阅读我的blog post以获取有关它的更多信息以及该问题的可能解决方案之一。
通过列表或其他集合可能会带来额外的挑战。检查一下不同的blog post,你会看到如何正确地做到这一点。
答案 1 :(得分:0)
Here's a good article关于如何将JSON传递给操作。它确实要求你包含ASP.NET Futures程序集,但这只是将一个dll放入你的bin并进行引用。这里的好处是代码将自动绑定到模型。到目前为止我发现了一个例外:枚举不起作用。 My work around涉及创建一个默认模型绑定器,用于处理从int转换枚举,但可能有更好的选项。