MVC ActionLink建议

时间:2016-07-21 15:27:01

标签: asp.net-mvc html-helper html.actionlink

我刚开始使用.NET,正在构建一个测试应用程序。我目前使用DefaultControllerIndex()操作方法设置了主页。这可以按预期工作,主页很简单www.domain.com。

我使用DefaultControllerTerms()操作方法在同一Privacy()下创建了2个新页面(条款和隐私权)。

我希望能够使用以下网址浏览这些内容:www.domain.com/terms和www.domain.com/privacy。

当我使用<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();
    }
}

3 个答案:

答案 0 :(得分:3)

如果这些是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 }
);

答案 1 :(得分:1)

我相信你想要做的是在网址中隐藏控制器名称。如果是这种情况,请回答您的问题:

ASP.NET MVC - Removing controller name from URL

我希望这会有所帮助:)

答案 2 :(得分:0)

您可以使用属性路由为端点提供特定路由。

[Route("terms")]
public ActionResult Terms()
{
    return View();
}
[Route("privacy")]
public ActionResult Privacy()
{
    return View();
}

RouteConfig.cs中,您必须使用以下代码行启用属性路由:routes.MapMvcAttributeRoutes();

现在,使用@Url.Action()@Html.ActionLink生成的所有网址都应生成以domain.com/privacy和domain.com/terms

为单位的网址