如何从action方法调用部分视图

时间:2013-09-17 11:28:41

标签: asp.net-mvc

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

我知道人们经常从JavaScript中加载部分视图,如下所示,并将部分视图结果存储到js变量中。

所以如果可能的话,请引导我从动作方法调用部分视图以及如何使用in action方法将部分视图结果存储到变量中。感谢

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(){ }
 });

2 个答案:

答案 0 :(得分:4)

您可以使用Partial ViewsView直接将Html.Partial呈现到Html.Action。两者都返回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。将其转换为字符串是替换所有scape '\r\n'字符所必需的。

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

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

在这里像魅力一样工作!

答案 1 :(得分: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)
            });
}