RewritePath而不是MVC中的返回视图

时间:2012-05-26 14:15:24

标签: asp.net-mvc rewrite rewritepath

有没有办法重写显示不同视图的路径而不是RedirectToAction或Redirect?我不希望网址发生变化,但是注意到常规的RewritePath无法“返回”,所以动作实际上会继续进行!

public ActionResult Register(){
    if (somehting){
        HttpContext.RewritePath(url);
        // I want it to stop here, somehow, but it keeps going and expects a return statement
    }
    return View();
}

更新:我刚注意到当我使用在stackoverflow中循环的那个(使用ProcessRequest)时,如果我运行F5它可以工作,但是当我直接访问它时,它给我“'HttpContext.SetSessionStateBehavior'只能在'HttpApplication之前调用'。 AcquireRequestState'事件被引发。“这意味着我在IIS设置中遗漏了什么,它是什么? :■

[更新] 为了清楚这一点,我需要重写一个“url”而不是一个动作或视图名称,它必须是一个url,就像旧的RewritePath(url)

4 个答案:

答案 0 :(得分:1)

仅限操作重定向:

使用示例return RedirectToAction("Action","Controller",new {id=1});

对于网址重定向:

可以使用return Redirect(URL);

也是HttpContext.RewritePath(url)之后的表达式;使用response.end();

答案 1 :(得分:1)

这是我最终做的,受Stephen的回答创建一个处理返回视图的方法的启发:

首先是全局方法(这里名为Homeout in Home controller) 在HomeController.cs下:

public ActionResult TimeOut(){
    return View("TimeOut"); // the string is essential
}

其他地方:

if (soemthing){
    return new HomeController().TimeOut(); }

有任何异议吗?错误的行为?

答案 2 :(得分:0)

使用不同的模型返回不同的视图,并且网址不会更改。

像这样,假设您有一个名为Hello.cshtml的视图。

return View('Hello',Model);

因此,您返回的视图与操作不同,网址保持不变,用户的视图更改。

答案 3 :(得分:0)

除了Cyril的回答,你可以直接调用另一个Controller方法并返回该方法的结果。假设你有一个方法如下,它返回你想要返回的内容。

    public ActionResult SpecialRegistration()
    {
       //TODO:  implement logic that does stuff
       return View();  // Shows the View named SpecialRegistration
    }

现在,在常规的Register方法中,您可以调用它

    public ActionResult Register(){
        if (something){
            return SpecialRegistration();
        }
   }