0

我有一个 MVC 应用程序,我想使用 json 将一个 html 表从控制器传递到视图。

我在这个网站上找到了这个问答: 通过 JSON 发送 HTML 代码,它推荐json_encode但它适用于 PHP,我正在使用 C#...

如何使用 Json 传递 HTML 表?

目前我尝试过:

return Json(MyHTMLTable);

在我看来:

<script type="text/javascript">
$(document).ready(function () {
    $.ajax({
        url: '@Url.Action("GetTable","MyPages")',
        type: 'POST',
        success: function (result) { $('#ph').html(result.responseText); },
        error: function (result) {
            $('#err').html(result.responseText);
        }
    })
});

(ph 是一个 div)

我收到以下错误: 序列化“System.Web.UI.WebControls.TableRow”类型的对象时检测到循环引用。

4

2 回答 2

1

首先,不需要使用 JSON 将 HTML 表从控制器传递到视图。JSON 旨在作为一种传输字符串化数据的方式,通常在 Web 服务和客户端之间传输。它在功能上类似于 SOAP。以这种方式将数据从控制器传输到视图是不好的,因为您失去了通过模型传递给您的强类型。

因此,您可以简单地将 HTML 表作为变量传递给视图模型中的视图。您也可以使用 ViewBag,但这样会丢失强类型。无论哪种方式,假设表是在您的 C# 中生成的,您只需将包含 HTML 的字符串转换为MvcHtmlString. 你这样做:

var table = MvcHtmlString.Create("<table>...");

然后将其包含在您的模型或 ViewBag 中。然后,您可以在视图页面上使用经典的 Razor 语法将表格打印到页面:

@Model.Table

或者

@ViewBag.table
于 2012-12-06T12:31:51.493 回答
1

更改您的 ajax 以删除@URL.Action

$.ajax({
    url: 'MyPages/GetTable',
    type: 'POST',
    success: function (result) { $('#ph').html(result.responseText); },
    error: function (result) {
        $('#err').html(result.responseText);
    }
})

在你的ActionResult()回报一个PartialView()

在此示例中名为 TableHtml 的局部视图中将是您的 html

public ActionResult GetTable(){

     // do something

     return PartialView("TableHtml");


}

阿贾克斯将接受这一点

但是,如果您必须返回 HTML,那么您可以使用 Json

public ActionResult GetTable(){

     // do something
     String myHtml = "<div></div>;

    return Json(myHtml, JsonRequestBehaviour.AllowGet);
}
于 2012-12-06T12:28:32.903 回答