【问题标题】:HTML returned to jQuery method not formed correctly返回给 jQuery 方法的 HTML 格式不正确
【发布时间】:2014-06-24 09:22:18
【问题描述】:

我有一个期望返回 HTML 的 jQuery Ajax 方法。 js 函数 url 转到 ASP.NET MVC 中的 JsonResult 方法。我正在使用 stringbuilder 来构建 HTML,当我在 VS 中使用 watch 时它看起来是正确的。但是,当它将 HTML 返回到页面时,我认为它没有被正确解码,它不是锚标记列表。

我的 javascript

 function getPanDocs(memberNum) {
        $.ajax({
            type: "GET",
            url: '/Home/GetPandoraDocs',
            dataType: 'html',
            data: {
                MembershipNumber: memberNum 
            },
            success: function (success) {
                $('.pandoraDoc' + memberNum).html(success);
            }
        });

控制器方法

 [HttpGet]
        public JsonResult GetPandoraDocs(string MembershipNumber)
        {
            Business.Pandora.Pandora p = new Business.Pandora.Pandora();
            string DocLinks =  p.GetDocsById(MembershipNumber);

            return Json(new { success = DocLinks }, JsonRequestBehavior.AllowGet);
        }

遍历实体集和构建锚标签的类方法

public string GetDocsById(string MembershipNumber)
        {

            DataLayer.Pandora.Pandora Pandora = new DataLayer.Pandora.Pandora();
            List<vwPandora2CheckOff> PandoraList = Pandora.GetPandoraDocsById(MembershipNumber);

            StringBuilder sb = new StringBuilder();
            sb.AppendLine("<ul>");
            foreach (var item in PandoraList)
            {
                sb.AppendLine("<li>");
                string r = item.StoragePath.Replace("\\\\s-documation\\IME_Pandora", "http://pandora.imeche.org/fileshare"); 
                sb.AppendLine("<a href=\" " + r + item.StorageName + "\" target=\"_blank\" >");
                sb.AppendLine("link to document");
                sb.AppendLine("</a>");
                sb.AppendLine("</li>");
            }
            sb.AppendLine("</ul>");
            return sb.ToString();
        }

我的问题是html没有正确渲染,不确定是c#代码还是js代码错误。

【问题讨论】:

  • 如果您希望它是 HTML,为什么要返回 JSON 字符串?只需更改为 ActionResult 并将其作为部分返回。
  • @AndreiV 如果我的方法类型是 ActionResult,我还需要返回 Json。我会试试你的建议。
  • 不,不需要 JSON。
  • 你是对的。试试这个:return ContentResult(DocLinks, "text/html");.
  • @AndreiV 谢谢你的工作。需要更改控制器中的逻辑。我完全按照原样保留了我的 javaScript。

标签: c# jquery html asp.net-mvc-3 decode


【解决方案1】:

在我看来,您使用的是实际的 XHR 对象而不是 responseText,请尝试:

function getPanDocs(memberNum) {
   $.ajax({
       type: "GET",
       url: '/Home/GetPandoraDocs',
       dataType: 'html',
       data: {
          MembershipNumber: memberNum 
       },
       success: function (success) {
          $('.pandoraDoc' + memberNum).html(success.responseText);
       }
   });
}

【讨论】:

    【解决方案2】:

    您从控制器发送对象。所以你可以作为success.success访问html

    function getPanDocs(memberNum) {
        $.ajax({
            type: "GET",
            url: '/Home/GetPandoraDocs',
            dataType: 'html',
            data: {
                MembershipNumber: memberNum 
            },
            success: function (success) {
                $('.pandoraDoc' + memberNum).html(***success.success***);
            }
        });
    }
    

    【讨论】:

      猜你喜欢
      • 2021-08-17
      • 2015-02-18
      • 2017-11-28
      • 2021-12-14
      • 2020-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-19
      相关资源
      最近更新 更多