什么是在ASP.NET MVC中的同一ActionResult中返回JSON *和* HTML的最佳方法

时间:2009-11-16 10:53:17

标签: asp.net-mvc json

我正在使用ASP.NET-MVC并从我的MVC操作返回JSON或HTML。

我遇到过一些需要同时返回BOTH JSON和HTML的情况。例如,我可能会更新购物车,需要返回HTML表示以及更新的JS对象模型。

我在SO上发现了很多关于何时返回哪种类型的回复的问题,但没有人谈论如何返回这两种回答。

有可靠的方法吗?必须在没有任何额外想法的情况下跨浏览器工作。

  • 多部分回复?
  • 在JSON结果中编码的HTML?
  • 嵌入在包含JSON的HTML中的某种脚本标记,它将运行更新对象模型的函数。我倾向于这种方法,但担心用html(“...”)将它们添加到DOM时可能无法可靠地运行脚本
  • 其他一些方式?

如果这不是一个好方法,我只需要发出2个请求来获取HTML然后是JSON。

3 个答案:

答案 0 :(得分:2)

an HTML representation as well as an updated JS object model

如果您使用HTML和JS更新视图的相同部分,请考虑在JSON结果中编码的HTML。如果您尝试更新视图的不同部分,那么我将使用两种操作方法来遵循“单一责任”规则。

答案 1 :(得分:1)

要返回多部分正文,您可以将响应打包在MIME容器中。 但这会使大多数客户无法使用该响应。

我通常将html放在JSON结果中。

答案 2 :(得分:0)

我使用了两种选择

  1. 返回HTML并将json对象放入隐藏跨度的“data”属性或隐藏输入的值。在你的ajax成功方法中,从那里获取对象。

    < span id ='response-message'data-result ='@ Html.Raw(JsonConvert.SerializeObject(Model.ComplexProperty))'/>

    $ .post(url,function(resp,st){   if(st =='success'){     var result = $('#response-message')。data('result);     if(result){     }   } });

  2. 将Javascript放入从AJAX返回的部分HTML中,并从该脚本中调用现有函数。有一种可靠的运行方式。您始终可以在html中找到脚本标记,并使用eval()进行评估。