MVC ActionLink 建议
MVC ActionLink advice
我刚开始使用 .NET,正在构建一个测试应用程序。我目前使用 DefaultController
和 Index()
操作方法设置主页。这按预期工作,主页很简单 www.domain.com.
我在相同的 DefaultController
下使用 Terms()
和 Privacy()
操作方法创建了 2 个新页面(条款和隐私)。
我希望能够使用 URL 作为 www.domain.com/terms 和 www.domain.com/privacy.[=19= 浏览这些内容]
当我使用 <li>@Html.ActionLink("Terms of Service", "Terms", "Default")</li>
时它有效,但它会将我带到 www.domain.com/Default/privacy.
的 URL
我应该为每个页面创建单独的控制器,还是我错误地使用了 @html.ActionLink
助手?我以前使用过 <li><a href="~/privacy">Privacy Policy</a></li>
,但我知道这不是最佳做法?
此外,有没有办法强制将链接设为小写?
我的控制器代码:
public class DefaultController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult Terms()
{
return View();
}
public ActionResult Privacy()
{
return View();
}
}
如果这些在 HomeController
中,我相信您不会遇到同样的问题。但是,我认为您可以使用 RouteConfig
文件来解决这个问题:
routes.MapRoute(
name: "Default",
url: "{Action}/{Id}",
defaults: new { controller = "Default", Action = "Index", Id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Generic",
url: "{controller}/{Action}/{Id}",
defaults: new { Action = "Index", Id = UrlParameter.Optional }
);
我相信你想要做的是在 url 中隐藏控制器名称。如果是这样,您的问题将在这里得到解答:
ASP.NET MVC - Removing controller name from URL
希望对您有所帮助:)
您可以使用属性路由为端点提供特定路由。
[Route("terms")]
public ActionResult Terms()
{
return View();
}
[Route("privacy")]
public ActionResult Privacy()
{
return View();
}
在您的 RouteConfig.cs
中,您必须使用以下代码行启用属性路由:routes.MapMvcAttributeRoutes();
现在,使用 @Url.Action()
或 @Html.ActionLink
生成的任何 URL 都应将 URLS 生成为域。com/privacy 和域。com/terms
我刚开始使用 .NET,正在构建一个测试应用程序。我目前使用 DefaultController
和 Index()
操作方法设置主页。这按预期工作,主页很简单 www.domain.com.
我在相同的 DefaultController
下使用 Terms()
和 Privacy()
操作方法创建了 2 个新页面(条款和隐私)。
我希望能够使用 URL 作为 www.domain.com/terms 和 www.domain.com/privacy.[=19= 浏览这些内容]
当我使用 <li>@Html.ActionLink("Terms of Service", "Terms", "Default")</li>
时它有效,但它会将我带到 www.domain.com/Default/privacy.
我应该为每个页面创建单独的控制器,还是我错误地使用了 @html.ActionLink
助手?我以前使用过 <li><a href="~/privacy">Privacy Policy</a></li>
,但我知道这不是最佳做法?
此外,有没有办法强制将链接设为小写?
我的控制器代码:
public class DefaultController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult Terms()
{
return View();
}
public ActionResult Privacy()
{
return View();
}
}
如果这些在 HomeController
中,我相信您不会遇到同样的问题。但是,我认为您可以使用 RouteConfig
文件来解决这个问题:
routes.MapRoute(
name: "Default",
url: "{Action}/{Id}",
defaults: new { controller = "Default", Action = "Index", Id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Generic",
url: "{controller}/{Action}/{Id}",
defaults: new { Action = "Index", Id = UrlParameter.Optional }
);
我相信你想要做的是在 url 中隐藏控制器名称。如果是这样,您的问题将在这里得到解答:
ASP.NET MVC - Removing controller name from URL
希望对您有所帮助:)
您可以使用属性路由为端点提供特定路由。
[Route("terms")]
public ActionResult Terms()
{
return View();
}
[Route("privacy")]
public ActionResult Privacy()
{
return View();
}
在您的 RouteConfig.cs
中,您必须使用以下代码行启用属性路由:routes.MapMvcAttributeRoutes();
现在,使用 @Url.Action()
或 @Html.ActionLink
生成的任何 URL 都应将 URLS 生成为域。com/privacy 和域。com/terms