jst*_*rdo 9 c# url-routing asp.net-mvc-5.2
我有一个 ASP.NET MVC 5 网站,其中有一个控制器 MyFirstController。
这样,我可以使用 加载索引视图https://example.server.com/MyFirst。
另一方面,我有另一个视图以这种方式呈现链接(HTML A 标记的 HREF 属性):
Url.Action("Index", "MyFirst")
Run Code Online (Sandbox Code Playgroud)
该 URL 呈现会导致生成链接:
https://example.server.com/MyFirst
Run Code Online (Sandbox Code Playgroud)
到目前为止,一切都很好。现在,我需要一条像这样的路线
https://example.server.com/MySecond
Run Code Online (Sandbox Code Playgroud)
Index该 URL 应加载控制器的相同视图MyFirst,而不创建名为 的新控制器MySecondController。这就像有一个MyFirst名为 的控制器别名MySecond。
在文件中RouteConfig.cs我添加了这个:
routes.MapRoute(name: "MySecond",
url: "MySecond/{action}/{id}",
defaults: new { controller = "MyFirst", action = "Index", id = UrlParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
我对这段代码的问题是我在另一个视图中有这个渲染代码:
@if (somecondition)
{
... Url.Action("Index", "MyFirst") ...
}
else
{
... Url.Action("Index", "MySecond") ...
}
Run Code Online (Sandbox Code Playgroud)
我需要如果somecondition为 true,则呈现的 URL 为https://example.server.com/MyFirst,如果为 false,则呈现的 URL 为https://example.server.com/MySecond。
我遇到的问题是两者都被渲染为https://example.server.com/MySecond.
我怎样才能完成这个任务?
Url.Action不要使用,而是使用use Url.Route,因为它允许显式传递用于渲染 url 的路由名称。
要呈现/MySecondurl,请传递路由名称MySecond。
@Url.RouteUrl("MySecond")
Run Code Online (Sandbox Code Playgroud)
执行相同的操作来呈现/MyFirsturl,但由于它没有显式的路由名称,因此您必须传递默认路由的名称和控制器的名称MyFirst。
@Url.RouteUrl("Default", new { Controller = "MyFirst" })
Run Code Online (Sandbox Code Playgroud)
您可以省略操作的名称Index,因为它已被设置为默认名称。
| 归档时间: |
|
| 查看次数: |
1227 次 |
| 最近记录: |