use*_*365 3 asp.net-mvc asp.net-mvc-3
我有一个带有outputCache的控制器的局部视图,因为我需要缓存这个元素.
然后我需要在每个页面中渲染这个PartialView,但首先我需要做一些字符串替换.
所以我的问题是,如何在控制器中获得部分视图,以便我可以操作内容并在将其返回到View之前进行一些字符串替换?
谢谢
我在自定义Controller基础上使用这些方法.
public string RenderPartialToString(string partialViewName, object model)
{
InvalidateControllerContext();
IView view = ViewEngines.Engines.FindPartialView(ControllerContext, partialViewName).View;
string result = RenderViewToString(view, model);
return result;
}
public string RenderViewToString(string viewName, object model)
{
InvalidateControllerContext();
IView view = ViewEngines.Engines.FindView(ControllerContext, viewName, null).View;
string result = RenderViewToString(view, model);
return result;
}
public string RenderViewToString(IView view, object model)
{
InvalidateControllerContext();
string result = null;
if (view != null)
{
StringBuilder sb = new StringBuilder();
using (StringWriter writer = new StringWriter(sb))
{
ViewContext viewContext = new ViewContext(ControllerContext, view, new ViewDataDictionary(model), new TempDataDictionary(), writer);
view.Render(viewContext, writer);
writer.Flush();
}
result = sb.ToString();
}
return result;
}
private void InvalidateControllerContext()
{
if (ControllerContext == null)
{
ControllerContext context = new ControllerContext(System.Web.HttpContext.Current.Request.RequestContext, this);
ControllerContext = context;
}
}
Run Code Online (Sandbox Code Playgroud)
该InvalidateControllerContext方法适用于您需要Controller手动实例以在控制器上下文之外呈现部分或视图的场景.
| 归档时间: |
|
| 查看次数: |
4854 次 |
| 最近记录: |