App.Web
并且App.Views
是我在一个解决方案中的项目,我将我的视图放在 App.Views 中并使用RazorGenerator进行预编译。App.Web
如果我使用like,它工作得很好,
~/Views/Index.cshtml
是我在 App.View 中的视图的虚拟路径
它可以在 App.Web 中成功渲染这个视图
public ActionResult Index() {
return View("~/Views/Index.cshtml");
}
但是当我尝试时RenderViewToString
,它会返回null
。
class FakeController : ControllerBase
{
protected override void ExecuteCore() { }
public static string RenderViewToString(string controllerName, string viewName, object viewData)
{
using (var writer = new StringWriter())
{
var routeData = new RouteData();
routeData.Values.Add("controller", controllerName);
var fakeControllerContext = new ControllerContext(new HttpContextWrapper(new HttpContext(new HttpRequest(null, "http://google.com", null), new HttpResponse(null))), routeData, new FakeController());
var razorViewEngine = new RazorViewEngine();
var razorViewResult = razorViewEngine.FindView(fakeControllerContext, viewName, "", false);
var viewContext = new ViewContext(fakeControllerContext, razorViewResult.View, new ViewDataDictionary(viewData), new TempDataDictionary(), writer);
razorViewResult.View.Render(viewContext, writer);
return writer.ToString();
}
}
}
这就是这一切,
FakeController.RenderViewToString("FakeName", "~/Views/Index.csthml", MessageModel);
这是在 asp.net core 中讨论并可能解决的,但我正在使用 asp.net mvc 5。
你能帮我弄清楚,为什么它不起作用?