Создание Html.ActionLink для страницы с динамическим содержимым - PullRequest
0 голосов
/ 30 сентября 2011

У меня есть функциональность на моем сайте для создания / редактирования / удаления страниц для внешнего интерфейса. Вот мой контроллер:

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, я могу просматривать динамический контент.

Я хочу создать ссылку на эту страницу. Я попробовал это так:

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

Но когда я смотрю на ссылку на странице, URL просто переходит на текущую страницу с Length=12 в строке запроса. Например, если я на главной странице, ссылка идет на mysite.com/Home?Length=12

Что я здесь не так делаю?

1 Ответ

2 голосов
/ 30 сентября 2011

Вы не используете корректную перегрузку 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
)

, что довольно очевидно объясняет, почему вы не генерируете ожидаемую ссылку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...