如何使用来自ControllerContext 的HTML代码来呈现一个PartialViewResult,而不必使用(因为在我的控制器对象.ControllerContext中,null是null,并且伪造或试图破解它不起作用)。.ControllerContext不是来自Contorller的INSIDE的null,但我需要在Contorller的之外使用)。
public string RenderRazorViewToString(string viewName, object model) {
ViewData.Model = model;
using (var sw = new StringWriter()) {
var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
var viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
viewResult.View.Render(viewContext, sw);
viewResult.ViewEngine.ReleaseView(ControllerContext, viewResult.View);
return sw.GetStringBuilder().ToString();
}
}(更广泛的explaination)------------------------------
我试过:
PartialViewResult (.ToString())中“生成普通字符串”我只是有一些PartialViewResult的ActionResult方法,有100%的有效和工作的HTML代码。我已经对这个主题进行了艰苦的搜索,但我发现的只是使用ControllerContext (顺便说一下)的答案。这段代码至少在20个不同的网页上提到。我在我的项目中也有这个,我不得不说,它工作得很好,但是我有一个PartialViewResult外部控制器)。
发布于 2016-09-04 00:30:35
类ActionFilterAttribute使用一个类型为ActionExecutedContext和name filterContext的参数来约束方法OnActionExecuted()。
是的,filterContext已经包含了我丢失的初始化和有效的.ControllerContext。
此属性可以直接指向控制器、操作(只有返回ActionResult的操作),也可以通过继承IFilterProvider及其一个方法GetFiltres间接地实现。
public IEnumerable<Filter> GetFilters(ControllerContext controllerContext, ActionDescriptor actionDescriptor)
{
if ((actionDescriptor.ControllerDescriptor.ControllerType == typeof(GemStoneProject.GemStoneController)) &&
(actionDescriptor.ActionName.Equals("GemStoneAction")) && controllerContext.HttpContext.Request.HttpMethod == "POST")
{
return new List<Filter>() { new Filter(this, FilterScope.Action, 0) };
}
return new List<Filter>() { };
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
/*your code, that replaces previous View to new View.
You have available and valid .ControllerContext inside "filterContext" argument*/
}如果您想要所有的builder.RegisterType().As(),您也需要这一行;
效果:在执行GemStoneAction之后,将调用OnActionExecuted。与有效.ControllerContext of GemStoneController.
https://stackoverflow.com/questions/39195849
复制相似问题