MVC ActionLink 建议

MVC ActionLink advice

我刚开始使用 .NET,正在构建一个测试应用程序。我目前使用 DefaultControllerIndex() 操作方法设置主页。这按预期工作,主页很简单 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