2012-05-26 60 views
1

有没有办法重写显示不同的视图,而不是RedirectToAction或重定向的路径?我不希望URL改变,但注意到常规的RewritePath不能被“返回”,所以这个动作实际上一直在继续!RewritePath而不是在MVC返回视图

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(); 
} 

更新:当我用一个计算器中的循环(带的ProcessRequest),如果我跑F5它的工作原理,但是当我直接访问它给我的“‘HttpContext.SetSessionStateBehavior’只能调用我只注意到在'HttpApplication.AcquireRequestState'事件发生之前。“这意味着我缺少IIS设置中的东西,它是什么? :■

[更新]要明确这一点,我需要重写“URL”不是一个动作或视图名称,它必须是一个URL,像好老RewritePath(URL)

+0

juke像MVC中的错误处理程序工作,它重写为错误页面 – Ayyash

+0

没有人得到答案,我仍然不知道如何重写MVC上的路径,它在ASP.NET中非常容易!我很确定它与MVC中构建的对象的顺序有关,首先调用路由,然后是控制器,然后是使响应刷新的东西,从而不允许重写路径生效。仍然,一定有办法 – Ayyash

+0

我该怎么办这个问题?没有答案,我应该删除吗? – Ayyash

回答

1

这是我终于做到了,由斯蒂芬的回答启发,创建处理返回视图的方法:

首先在HomeController.cs下的全局方法(这里命名为Home Timeler中的Timeout) :

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

别的地方:

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

任何异议?错误的行为?

+0

PS。 TimeOut字符串引用新控制器文件夹下的超时页面,而不是主控制器文件夹,无益! – Ayyash

+0

这是最接近我可以模仿一个简单的重写规则 – Ayyash

1

对于只有行动,重定向:

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

对于URL重定向:

可以使用return Redirect(URL);

也表达式HttpContext.RewritePath(url);使用response.end();

+1

重定向方案更改网址,我不想这样做,我确实尝试response.end,响应严重结束,但它没有重定向到任何东西,我错过了什么? – Ayyash

0

用不同的模型返回不同的视图,url不会改变。

像这样让我们说你有一个名为Hello.cshtml的视图。

return View('Hello',Model); 

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

+0

我想重写一个url,因为我只是保持每个url指向的查找表,我不能使用显式视图名称 – Ayyash

+1

您不清楚,请告诉我们更多关于您想实现的内容。 – Kuqd

+0

Cyril,return View不能在不同的控制器上工作 – Ayyash

0

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

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

现在,在你的定期注册方法,你可以叫它

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

这意味着它们必须在同一个控制器中,限制性太强 – Ayyash

+0

我刚试过这个,奇怪的是,调用SpecialRegistration返回Register View,因为它是(register.cshtml),有意义吗? – Ayyash

+0

受到这个答案的启发,我发现了如何绕过它,但它不像我希望的那样干净......查看答案 – Ayyash

相关问题