我需要在视图模型中使用System.Web.Routing.RequestContext
才能调用HtmlHelper.GenerateLink()
。
在MVC 1.0中,可以通过强制转换当前IHttpHandler
来静态获取上下文:
var context = ((MvcHandler) HttpContext.Current.CurrentHandler).RequestContext;
现在项目已升级到MVC 2.0,并且会在演员阵容上抛出此异常:
无法将“ServerExecuteHttpHandlerWrapper”类型的对象强制转换为“System.Web.Mvc.MvcHandler”。
我不确定它是否相关,但这是在IIS6上的.NET 4.0中运行。
答案 0 :(得分:16)
我需要在视图模型中使用System.Web.Routing.RequestContext才能调用HtmlHelper.GenerateLink()。
虽然理论上你可以写:
var rc = HttpContext.Current.Request.RequestContext;
在实践中,你绝对不应该在视图模型中做这样的事情。这就是HTML帮助者应该做的事情:
public static MvcHtmlString GenerateMyLink<MyViewModel>(this HtmlHelper<MyViewModel> html)
{
MyViewModel model = html.ViewData.Model;
RequestContext rc = html.ViewContext.RequestContext;
//TODO: use your view model and the HttpContext to generate whatever link is needed
...
}
并且在您强烈输入的MyViewModel视图中:
<%= Html.GenerateMyLink() %>
答案 1 :(得分:11)
我不知道你想对System.Web.Routing.RequestContext
做什么?退房:
var context = new HttpContextWrapper(System.Web.HttpContext.Current);
var routeData = RouteTable.Routes.GetRouteData(context);
// Use RouteData directly:
var controller = routeData.Values["controller"];
// Or with via your RequestContext:
var requestContext = new RequestContext(context, routeData);
controller = requestContext.RouteData.Values["controller"]