将控制器外部的视图渲染为字符串时出现html.hiddenfor错误

时间:2017-06-09 14:58:11

标签: c# asp.net-mvc razor view render

我需要服务器端页面渲染(没有请求)外部控制器(我想在控制器外部渲染视图)。 为此,我需要假HttpRequest来创建ControllerContext,这样我就可以使用razor.Render()呈现视图并返回 使用信号器集线器stringWriter.ToString()到客户端。

所以我用这段代码将partialview渲染为字符串;

public class FakeController : Controller   { }

HttpRequest httpRequest = new HttpRequest("", new UriBuilder("http", "localhost", 10654, "/" + "SomeController/SomeAction").Uri.ToString(), "");
var routeData = new RouteData();
routeData.Values.Add("Controller", "SomeController");
routeData.Values.Add("Action", "SomeAction");
StringWriter stringWriter = new StringWriter();
HttpResponse httpResponse = new HttpResponse(stringWriter);
HttpContext httpContextMock = new HttpContext(httpRequest, httpResponse);
var _contextWrapper = new HttpContextWrapper(httpContextMock);

var controllerContext = new ControllerContext(new RequestContext(_contextWrapper , routeData), new FakeController());

string filePath = "~/Areas/Site/Views/Shared/SomePartialView.cshtml";
var razor = new RazorView(controllerContext, filePath, null, false, null);

razor.Render(new ViewContext(controllerContext, razor, new ViewDataDictionary(model), new TempDataDictionary(), stringWriter), stringWriter);
return stringWriter.ToString();

此处代码尝试呈现@Html.HiddenFor(m => m.property)

我收到错误;

source : System.Web.WebPages 
error  : Object reference not set to an instance of an object

但奇怪的是我可以获得@Model.property值(我的意思是它不是空)以及其他模型属性(似乎只有@ Html.HiddenFor或@ Html.Hidden才是问题)。

0 个答案:

没有答案