【问题标题】:Passing HTML Table to MVC View from controller从控制器将 HTML 表传递给 MVC 视图
【发布时间】:2012-11-24 11:29:34
【问题描述】:

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

我在这个网站上找到了这个问答: Sending HTML Code Through JSON 推荐 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”类型的对象时检测到循环引用。

【问题讨论】:

    标签: c# asp.net-mvc json html-table


    【解决方案1】:

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

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

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

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

    @Model.Table
    

    @ViewBag.table
    

    【讨论】:

    • 非常感谢!真的很有帮助!
    • 这样回答了你的问题? :)
    【解决方案2】:

    更改您的 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");
    
    
    }
    

    Ajax 会接受这个

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

    public ActionResult GetTable(){
    
         // do something
         String myHtml = "<div></div>;
    
        return Json(myHtml, JsonRequestBehaviour.AllowGet);
    }
    

    【讨论】:

    • 这不是局部视图。我动态生成 html 表,所以我无法判断视图的外观......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    • 2013-11-14
    相关资源
    最近更新 更多