如果条件满足,我正在尝试返回不同的视图。我想保留从动作传递到视图中的模型。
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
var subAction = filterContext.RequestContext.RouteData.Values["subaction"].ToString();
var action = filterContext.RequestContext.RouteData.Values["action"].ToString();
if (!string.IsNullOrEmpty(subAction))
{
var view = (ViewResultBase) (filterContext.Result);
filterContext.Result = View(action + subAction, view.ViewData.Model);
}
base.OnActionExecuting(filterContext);
}
当这样做的时候,我得到一个“Object reference not set to an instance of an object.
”。显然,该模型尚未设定?
我这样做的原因是,我希望尽可能简化视图的命名。我的网址如下:/Global/Modules/Admin/Users/Create
。这将返回视图“UsersCreate”。哪个有效。但模型要么为空,要么为空!
更新
实际上。它只是打击了我。行为是正确的。因为我只返回一个视图。该动作永远不会执行。执行Users-action,但返回视图UsersCreate。如何在没有实际重定向的情况下进行RedirectToAction。
答案 0 :(得分:1)
OnActionExecuting
在操作之前运行,因此还没有模型存在。您可以尝试使用OnActionExecuted
,该操作会在操作返回ActionResult
后调用。
答案 1 :(得分:0)
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
...
if (needToRedirect)
{
...
filterContext.Result = new RedirectResult(url);
return;
}
...
}