【问题标题】:How to return HTML from controller using ajax?如何使用ajax从控制器返回HTML?
【发布时间】:2017-01-03 22:29:18
【问题描述】:

我的控制器代码:

    public async Task<ActionResult> GetHtml(int id)
    {
        var myModel = await db.Models.FindAsync(id);

        return Json(new { jsonData = myModel.MyHtml }, JsonRequestBehavior.AllowGet); 
    }

我的查看代码:

$('#MyDropDownList').on('change', function() {
    var myModelId = $(this).val();
    var urlGetMyHtml = '@Url.Action("GetHtml", "MyHtmlController")';
    $.getJSON(
        urlGetMyHtml,
        { id: myModelId },
        function(jsonData) {
            console.log(jsonData);                
            $('textarea#MyHtmlArea').val(jsonData);
    });
});

成功函数永远不会执行...我检查了 Fiddler 和 Firebug,代码在控制器上成功运行并在客户端上交付。但是后来函数没有执行……

研究,我发现只有当我们有一个有效的 JSON 时才执行成功函数,然后我的猜测是我的 JSON 包含 HTML 代码(它用于所见即所得的编辑器,如 tinymce)getJSON 说它无效......

那么,使用 ajax 发送我的 html sn-p 的正确方法是什么?

【问题讨论】:

  • 执行此操作的典型方法是让您的控制器返回视图或部分视图而不是 json。
  • 好吧.. HTML 不是 JSON。因此,如果您想返回 JSON,请在 JSON 字符串中格式化 HTML,或者...返回 HTML。
  • 你试过 HttpServerUtility.HtmlEncode 吗?这会将任何 html 编码为安全字符串。

标签: javascript jquery json asp.net-mvc


【解决方案1】:

对我来说,将 HTML 作为 JSON 返回似乎有点牵强,即使它是可能的。

如果您只想返回一串 HTML 代码,您可以简单地 return Content(myModel.MyHtml)

然后,在您的 javascript 中,您需要将您对 $.getJSON 的调用替换为一个简单的 $.get,它类似于 $.getJSON,但不期望响应中有 JSON 数据。

    $.get(urlGetMyHtml,
          { id: myModelId },
          function(response) {
              $('textarea#MyHtmlArea').val(response);
          });

【讨论】:

    猜你喜欢
    • 2020-08-13
    • 2016-05-21
    • 2016-01-21
    • 2011-10-25
    • 2012-09-22
    • 2017-08-19
    • 2021-09-15
    • 1970-01-01
    相关资源
    最近更新 更多