我想通过传递模型数据从动作方法调用局部视图,当部分视图将处理并生成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(){ }
});
答案 0 :(得分:4)
您可以使用Partial Views
或View
直接将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)
首先,您可以创建一个方法,它将接受ViewName
和Model
它将返回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)
});
}