ASP MVC重定向而不更改URL(路由)

目标:我希望能够输入url:www.mysite.com/NewYork或www.mysite.com/name-of-business

取决于我想要在不更改URL的情况下路由到不同操作的字符串。

到目前为止我有:

public static void RegisterRoutes(RouteCollection routes) { routes.MapRoute( "UrlRouter", // Route name "{query}", // URL with parameters new { controller = "Routing", action = "TestRouting" } // Parameter defaults ); } 

在控制器中我有:

 public ActionResult TestRouting(string query) { if (query == "NewYork") return RedirectToAction("Index", "Availability"); // <--------- not sure else if (query == "name-of-business") return Redirect("nameofbusines.aspx?id=2731"); // <--------- not sure else return RedirectToAction("TestTabs", "Test"); // <--------- not sure } 

我已经尝试了所有内容重定向/转移到页面而不更改URL,但我尝试过的所有内容都会更改URL或给我一个错误。

基本上我正在寻找相当于server.transfer的地方,我可以保留URL但是将信息发送到动作并让它显示其结果。

我和尼克在这一个,虽然我认为你可以只使用常规视图,而不必做部分。 如果它们不在与控制器相对应的视图中,则可能需要将它们实现为共享视图(因为它只会查看关联视图和共享视图)。

 public ActionResult TestRouting(string query) { if (query == "NewYork") { var model = ...somehow get "New York" model return View("Index", model ); } else if (query == "name-of-business") { var model = ...get "nameofbusiness" model return View("Details", model ); } else { return View("TestTabs"); } } 

然后,每个视图将采用模型的特定实例并使用模型呈现其内容。 该URL不会更改。

无论何时使用RedirectResult,您实际上都会向浏览器发送HTTP重定向,这会强制更改URL。

您可以像这样更改控制器:

 public ActionResult TestRouting(string query) { string controller,action; if (query == "NewYork") { controller = "Availability"; action = "Index"; } else { controller = "Test"; action = "TestTabs"; } ViewBag.controller = controller; ViewBag.action = action; return View(); } 

然后,您可以在视图中使用这些ViewBags,如下所示:

 @{ Layout = null; Html.RenderAction(ViewBag.action, ViewBag.controller); } 

而已。 您可以使用类和一些函数来改进此示例。

我不确定你是否尝试过这种方式或者这种方式有什么缺点..

将global.asax文件添加到项目中。 在那里添加以下方法:

 void Application_BeginRequest(object sender, EventArgs e) { // Handles all incoming requests string strURLrequested = Context.Request.Url.ToString(); GetURLToRedirect objUrlToRedirect = new GetURLToRedirect(strURLrequested); Context.RewritePath(objUrlToRedirect.RedirectURL); } 

GetURLToRedirect可以是一个具有根据输入的URL查找实际URL的逻辑的类。[RedirectURL]属性将设置为使用url重定向到工作表下方。

希望有帮助……

你是说你想去“www.mysite.com/NewYork”,然后“真的”去“其他地方”,但留下url? 也许您想要做的是使用部分视图来实现这一点? 这样,您的基页将被路由到,然后在该页面内进行条件测试以显示不同的部分视图? 我已经在我的应用程序中完成了查看网格的只读版本或可编辑网格。 它工作得非常好。

我不知道你可以做些什么来重定向到.aspx页面,但你应该能够用这样的东西替换RedirectToAction(...)s

 public ActionResult TestRouting(string query) { if (query == "NewYork") { var controller = new AvailabilityController(); return controller.Index(); } else if (query == "name-of-business") return Redirect("nameofbusines.aspx?id=2731"); <--------- not sure else { var controller = new TestController(); return controller.TestTabs(); } }