【问题标题】:Convert PartialView to HTML [duplicate]将 PartialView 转换为 HTML [重复]
【发布时间】:2013-08-20 19:22:34
【问题描述】:

我只是想知道是否可以转换

PartialView("_Product", model)

html 以便我们可以使用 JSON 将其发回?

return Json(result, JsonRequestBehavior.AllowGet);

【问题讨论】:

    标签: c# .net asp.net-mvc json partial-views


    【解决方案1】:

    当然,将以下方法放在共享控制器或帮助器类中。它将以 HTML 格式返回呈现的视图,其用法是自我解释的:

    public static string RenderViewToString(ControllerContext context, string viewName, object model)
    {
        if (string.IsNullOrEmpty(viewName))
            viewName = context.RouteData.GetRequiredString("action");
    
        var viewData = new ViewDataDictionary(model);
    
        using (var sw = new StringWriter())
        {
            var viewResult = ViewEngines.Engines.FindPartialView(context, viewName);
            var viewContext = new ViewContext(context, viewResult.View, viewData, new TempDataDictionary(), sw);
            viewResult.View.Render(viewContext, sw);
    
            return sw.GetStringBuilder().ToString();
        }
    }
    

    【讨论】:

    • 你是个了不起的天才! :)
    • @Leo Nix 我应该如何创建上下文参数?我试图初始化一个实例,但我不知道它的构造函数的 ControllerBase 参数。
    • 如果在控制器动作的上下文中使用它,则不需要创建一个:ControllerContext 是控制器的属性,因此只需将其传入即可。goo.gl/pp5AkR
    • 假设您尝试在 HTML 中呈现部分视图,而不是从控制器调用它。那么你用什么作为上下文呢?例如<script> var viewHtml = @Helpers.RenderViewToString(???, "~/Views/MyView.cshtml", null);您无权从 View 访问 ControllerContext。
    • 谢谢伙计,你拯救了我的一天 :)
    【解决方案2】:

    我不知道这是否是最佳做法,但如果你保持原样

    return PartialView("_Product", model)
    

    然后就可以使用AJAX调用方法了:

    $.ajax ({
      type: "POST",
            url: _url,
            data: _data,
            success: function (result) {
                // the result is the returned html from the partial view
            }
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-14
      • 2011-09-28
      • 2015-09-29
      • 2013-10-29
      • 2011-03-04
      • 2010-09-21
      相关资源
      最近更新 更多