App.Web
和App.Views
都是我的项目,放在同一个解决方案中。我将视图放在了App.Views
并使用RazorGenerator进行了预编译。如果我使用App.Web
,它可以正常工作,如下:
~/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();
}
}
}
这是如何做到的,涉及IT技术。
FakeController.RenderViewToString("FakeName", "~/Views/Index.csthml", MessageModel);
这个问题已经在asp.net core中被讨论并可能已经解决,但我正在使用asp.net mvc 5。
请问你能帮我找出为什么它不起作用吗?