1

我想通过传递模型数据从操作方法调用部分视图,当部分视图将被处理并生成 UI 时,我想将部分视图 html 存储在变量中,并在操作中。

我知道人们经常像下面这样从 JavaScript 加载部分视图并将部分视图结果存储到 js 变量中。

因此,如果可能的话,请指导我从操作方法调用部分视图以及如何使用操作方法将部分视图结果存储到变量中。谢谢

public PartialViewResult yourpartialviewresult()
{
    return PartialView("partialview", model);
}


client side
-----------
var html;

$.ajax({
    type: 'GET',
    url: '/home/yourpartialviewresult',
    dataType: 'html', //be sure to use html dataType
    contentType: 'application/json; charset=utf-8',
    success: function(data){
        html = data;
    },
    complete: function(){ }
 });
4

2 回答 2

4

您可以直接渲染Partial ViewsViewUsingHtml.PartialHtml.Action. 两者都返回 a MvcHtmlString,所以这很简单:

使用 Html.Partial

<script type="text/javascript">
    var html = '@Html.Raw(Html.Partial("_Partial", Model).ToString().Replace("\r\n", ""))';
</script>

使用 Html.Acition

<script type="text/javascript">
    var html = '@Html.Raw(Html.Action("actionName", "controllerName").ToString().Replace("\r\n", ""))';
</script> 

此代码强烈Partial View调用Model. 将其转换为字符串是替换所有转义'\r\n'字符所必需的。

然后,使用HTML.Raw返回原始 HTML 字符串。

此代码必须保留在您正在创建变量的视图中。

在这里工作就像一个魅力!

于 2013-09-17T12:23:50.823 回答
4

首先,您可以创建一个方法,它将接受ViewNameModel返回 HTML 字符串

public static string RenderRazorViewToString(ControllerContext controllerContext, string viewName, object model)
{
    controllerContext.Controller.ViewData.Model = model;
    using (var sw = new StringWriter())
    {
        var viewResult = ViewEngines.Engines.FindPartialView(controllerContext, viewName);
        var viewContext = new ViewContext(controllerContext, viewResult.View,
                controllerContext.Controller.ViewData, controllerContext.Controller.TempData, sw);
        viewResult.View.Render(viewContext, sw);
        viewResult.ViewEngine.ReleaseView(controllerContext, viewResult.View);
        return sw.GetStringBuilder().ToString();
    }
}

用法也你必须返回JsonResult而不是PartialViewResult

public JsonResult yourpartialviewresult()
{
    return Json(new
            {
                data = RenderRazorViewToString(this.ControllerContext, "partialview", model)
            });
}
于 2013-09-17T12:41:27.480 回答