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

时间:2011-09-30 17:23:04

标签: c# asp.net asp.net-mvc asp.net-mvc-3

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

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" })

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

我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

您没有使用正确的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
)

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