有没有办法重写显示不同视图的路径而不是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)
答案 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();
}
}