ASP.NET MVC中返回JSON和HTML的最佳方式是什么?

5

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

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

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

有可靠的方法来实现这一点吗?必须在浏览器中无需任何额外的考虑即可工作。

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

如果没有好的方法,我就只能进行2次请求,以获取HTML和JSON。

3个回答

2
an HTML representation as well as an updated JS object model

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


1
为了返回一个多部分体,您可以将响应打包在 MIME 容器内。但这样会使大多数客户端无法使用该响应。
我通常将 HTML 放在 JSON 结果中。

谢谢 - 有没有什么技巧可以将其解码/编码为JSON友好格式?如果你碰巧正在使用ASP.NET MVC,你是如何将视图中的HTML转换为JSON模型的呢? - Simon_Weaver
客户端我使用jQuery包装器来处理JSON。 服务器端,你只需要转义引号字符(如果你使用UTF字符集),就可以将HTML编码为JSON字符串。至于.NET MVC,我想你应该直接调用Render()方法,传递一个基于内存的HtmlTextWriter,然后使用缓冲区中存储的HTML。 - Patonza

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()来评估它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接