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

Ces*_*era 6 c# asp.net asp.net-mvc url-routing

目标:我希望能够输入网址: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
    );
}
Run Code Online (Sandbox Code Playgroud)

在控制器中我有:

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
}
Run Code Online (Sandbox Code Playgroud)

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

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

tva*_*son 5

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

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");
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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


Nic*_*ore 0

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