将JSON传递给ASP.NET MVC2网站

时间:2010-11-23 12:14:03

标签: c# asp.net-mvc json asp.net-mvc-2

我构建了一个JSON对象列表,现在想要传递给ASP.NET MVC2网站。

如果我不使用Web服务,而是使用Controllers / Views,那么输入类型是什么?串?这样做有什么好的做法?

目的是我想使用Microsoft的AJAX框架,这使得没有javascript支持的浏览器仍然能够使用该网站。否则,我会使用jQuery对Web服务进行AJAX调用。

2 个答案:

答案 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转换枚举,但可能有更好的选项。

相关问题