除了直接在视图中工作之外,在 ASP.NET MVC 应用程序中运行时,是否有任何方法可以访问当前正在运行的请求的 FormCollection、ViewData、ModelState 等?我希望能够从视图中调用一些自定义处理程序,但无需传递它们即可访问这些集合。我在想一些类似于 HttpContext.Current 在网络表单中的东西?
问问题
2004 次
2 回答
2
尝试,
var wrapper=new HttpContextWrapper(System.Web.HttpContext.Current);
var routeData = RouteTable.Routes.GetRouteData(wrapper);
Controller con = (Controller)ControllerBuilder.Current.GetControllerFactory().CreateController(new RequestContext(wrapper, routeData), routeData.Values["controller"].ToString());
var viewData = con.ViewData;
var modelState= con.ModelState;
var form=new FormCollection();
var controllerContext = new ControllerContext(wrapper, routeData, con);
Predicate<string> propertyFilter = propertyName => new BindAttribute().IsPropertyAllowed(propertyName);
IModelBinder binder = Binders.GetBinder(typeof(FormCollection));
ModelBindingContext bindingContext = new ModelBindingContext()
{
ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(() => form, typeof(FormCollection)),
ModelName = "form",
ModelState = modelState,
PropertyFilter = propertyFilter,
ValueProvider = ValueProviderFactories.Factories.GetValueProvider(controllerContext)
};
form = (FormCollection)binder.BindModel(controllerContext, bindingContext);
于 2011-08-15T03:09:58.993 回答
0
有一个 ViewContext 对象可以让您链接回您所要求的大部分内容,但您确实必须问自己为什么要在视图中执行所有这些操作。(无论如何,恕我直言)
编辑:我可能误读了你的问题。控制器中有一个ControllerContext,视图中有一个ViewContext。MVC 中的大多数扩展点都有某种 Context 对象,可让您获取请求及其数据。
于 2011-08-14T21:18:03.340 回答