创建Html.ActionLink到动态内容页面

本文关键字:动态 Html ActionLink 创建 | 更新日期: 2023-09-27 18:10:13

我的网站上有创建/编辑/删除前端页面的功能。这是我的控制器:

namespace MySite.Controllers
{
    public class ContentPagesController : Controller
    {
        readonly IContentPagesRepository _contentPagesRepository;
        public ContentPagesController()
        {
            MyDBEntities entities = new MyDBEntities();
            _contentPagesRepository = new SqlContentPagesRepository(entities);
        }

        public ActionResult Index(string name)
        {
            var contentPage = _contentPagesRepository.GetContentPage(name);
            if (contentPage != null)
            {
                return View(new ContentPageViewModel
                {
                    ContentPageId = contentPage.ContentPageID,
                    Name = contentPage.Name,
                    Title = contentPage.Title,
                    Content = contentPage.Content
                });
            }
            throw new HttpException(404, "");
        }
    }
}

在我的global.asax:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.MapRoute(
        "Page", // Route name
        "Page/{name}", // URL with parameters
        new { controller = "ContentPages", action = "Index" }, // Parameter defaults
        new[] { "MySite.Controllers" }
    );
    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
        new[] { "MySite.Controllers" }
    );
}

所以我在数据库中有一个动态页面,名为About。如果我去mysite.com/Page/About,我可以查看动态内容。

我想创建一个ActionLink到这个页面。我试过这样做:

@Html.ActionLink("About Us", "Index", "ContentPages", new { name = "About" })

但是当我查看页面上的链接时,url只是转到查询字符串中包含Length=12的当前页面。例如,如果我在主页上,链接到mysite.com/Home?Length=12

我在这里做错了什么?

创建Html.ActionLink到动态内容页面

您没有使用正确的ActionLink过载。试试这样:

@Html.ActionLink(
    "About Us",                // linkText
    "Index",                   // action
    "ContentPages",            // controller
    new { name = "About" },    // routeValues
    null                       // htmlAttributes
)

而在你的例子中:

@Html.ActionLink(
    "About Us",                // linkText
    "Index",                   // action
    "ContentPages",            // routeValues
    new { name = "About" }    // htmlAttributes
)

这很明显地解释了为什么你没有生成预期的链接