返回JSON以进行查看的标准方法

时间:2011-02-25 01:22:46

标签: asp.net-mvc json standards

我有一个带有几个简单字段和jQuery网格的视图。我通过我的模型填充的字段,所以我的第一个想法是尝试以相同的方式填充我的网格。事情是,在我的头撞到这个问题之后,我开始怀疑是否可能是我试图反对这个问题。看起来普遍接受的做法(更重要的是如何设计),视图中使用json作为数据的组件在他们可以进行单独调用以获得返回的JSONResult然后将处理时最有效。

通常这不是什么大问题,但是出于各种未来的证明(不是我的决定......有建筑师的乐趣)我们有一个单独的WCF层,我们的MVC层调用。所以现在我不得不担心过多的细粒度调用。这实际上是让我尝试基于模型的人口方法。我想知道的是这种方法有多常见,或者每个人都只有一堆控制器方法让他们的UI组件调用来获取JSON?

2 个答案:

答案 0 :(得分:0)

我为JSON结果使用标准通用模型,如

 public class JSONOutputModel<T>{

       public int RequestId{ get; set; }

       public string Type { get{ return typeof(T).FullName; } }

       public T Model{ get; set; }

 }

然后我在JavaScript中使用标准的通用发送/接收JSON方法。

答案 1 :(得分:0)

从动作中返回json的最通用方法是简单地调用Json()方法。

return Json(viewModel);

如果您专门为jqGrid返回数据,则可以使用自己的ActionResult。这是我们使用的。我们还有一个扩展方法,可以从我们的服务分页包装器转换为此结果。

public class TableResult : ActionResult
{
    public override void ExecuteResult(ControllerContext context)
    {
        context.HttpContext.Response.Write(ToJqGridJson());
    }

    public object ToJqGridJson()
    {
        return new {total = Total, page = Page, records = Records, rows = Rows};
    }

    public int Total { get; set; }
    public int Records { get; set; }
    public int Page { get; set; }
    public object[] Rows { get; set; }
}

在控制器中:

return new TableResult() { ... };

或     return queryResults.ToTableResult();

就未来发展而言,甚至不要尝试!你最终会得到大量的前期设计,我保证它不会得到回报。我们学到了很多困难,最近才开始抛弃我们的大量抽象。如果您不确切知道将来如何使用它,那么编写代码是没有意义的。此外,WCF可以很容易地被MVC应用程序本身取代。 MVC不必仅返回网站。我们已经转而使用.net 4.0的javascript序列化器+ MVC +客户端javascript反序列化器来提供Web服务。您可以共享您已经为MVC编写的身份验证,以及所有过滤器等,而不必担心配置WCF的可怕混乱。看看技术正朝着哪个方向发展:移动和集成!你不打算在手机上做WCF。看看JSON,ATOM,RSS等。

http://ayende.com/Blog/archive/2011/02/23/flatten-your-architecture-simplicity-as-a-core-value.aspx