Помогите мне заставить работать ASP.NET MVC2 RC ActionLink? - PullRequest
1 голос
/ 26 февраля 2010

У меня мог быть SWORN У меня это работало, но где-то вдоль линии я, очевидно, сломал его. Возможно, это было во время моей миграции с ASP.NET MVC в VS2008 на ASP.NET MVC2 в VS2010.

My ActionLink:

Html.ActionLink(segment.TitleWithChapterNumber, "Index", "Read", new { bookCode = Model.Product.Id, segmentCode = segment.Index }, null)

Маршрут, по которому я ожидаю совпадения:

routes.MapRoute(
    "Read",
    "Read/{bookCode}/{segmentCode}/{sectionCode}/{renderStrategy}",
    new { controller = "Read", action = "Index", bookCode = "", segmentCode = "", sectionCode = "", renderStrategy = "" }
);

Это дает ссылку, которая выглядит следующим образом: http://localhost/Obr/Read?bookCode=14&segmentCode=0 Но я хочу, чтобы это выглядело как http://localhost/Obr/Read/14/0 Нажатие на ссылку, которую он отображает, приводит меня к правильному контроллеру, и ответ точен. Если я вставлю ссылку, я хочу, чтобы она выглядела, она работает. Я думаю, это просто не соответствует?

Я что-то упускаю из виду? Я так долго на него смотрю, что даже не знаю, что ищу.

Для справки, вот ВСЕ мои маршруты:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute(
    "ReadImage",
    "Read/Image/{bookId}/{imageName}",
    new { controller = "Read", action = "Image" }
);

routes.MapRoute(
    "Read",
    "Read/{bookCode}/{segmentCode}/{sectionCode}/{renderStrategy}",
    new { controller = "Read", action = "Index", bookCode = "", segmentCode = "", sectionCode = "", renderStrategy = "" }
);

routes.MapRoute(
    "BookReport",
    "BookReport/{action}/{folder}",
    new { controller = "BookReport", action = "Details", folder = "" }
);

routes.MapRoute(
    "Reference",
    "Reference/Details/{referenceType}/{searchText}",
    new { controller = "Reference", action = "Details", referenceType = "", searchText = "" }
);

routes.MapRoute(
    "PaginatedAudits",                                      // Route name
    "Audit/Page/{pageNumber}",                              // URL with parameters
    new { controller = "Audit", action = "Index" }          // Parameter defaults
);

routes.MapRoute(
    "PaginatedReadLog",                                     // Route name
    "ReadLog/Page/{pageNumber}",                            // URL with parameters
    new { controller = "ReadLog", action = "Index" }        // Parameter defaults
);

routes.MapRoute(
    "Default",                                              // Route name
    "{controller}/{action}/{id}",                           // URL with parameters
    new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
);

Подпись действия выглядит следующим образом:

[Authorize]
public ActionResult Index(string bookCode, string segmentCode, string sectionCode, string renderStrategy)
{
    // code
}

Ответы [ 2 ]

0 голосов
/ 20 июля 2010

Ваши определения маршрута должны иметь UrlParameter.Optional вместо пустых строк.

routes.MapRoute(
    "Read",
    "Read/{bookCode}/{segmentCode}/{sectionCode}/{renderStrategy}",
    new { controller = "Read", action = "Index", bookCode = UrlParameter.Optional, segmentCode = UrlParameter.Optional, sectionCode = UrlParameter.Optional, renderStrategy = UrlParameter.Optional }
);

Это также поможет с перенаправлением в контроллерах и URL-адресах форм, созданных с помощью расширений MVC.

0 голосов
/ 26 февраля 2010

Попробуйте ссылку на маршрут, явно указав название маршрута:

Html.RouteLink(
    segment.TitleWithChapterNumber, // linkText
    "Read", // routeName
    new { 
        bookCode = Model.Product.Id, 
        segmentCode = segment.Index 
    }, // routeValues
    null // htmlAttributes
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...