MVC 3 Вопрос маршрутизации - PullRequest
0 голосов
/ 13 июня 2011

Я новичок в MVC, так что извините, если это немного нубский вопрос:

Я настраиваю несколько пользовательских маршрутов в global.asax.

routes.MapRoute(
    "Choose_your_dvd_Index",
    "Choose-your-dvd",
    new  { controller = "DVD", action = "Index" }
    );

routes.MapRoute(
    "Choose_your_dvd",
    "Choose-your-dvd/{categoryName}",
    new { controller = "DVD", action = "Category" }
    );

В частности, я сопоставляю «Choose-you-dvd / {categoryName}» для моего контроллера DVD, где у меня есть следующий результат просмотра, а также страница по умолчанию "Choose-Your-DVD".

public ViewResult Category(string categoryName)
{
    var category = (db.Categories.Where(i => i.Name == categoryName).FirstOrDefault()) ?? null;

    if (category != null)
        return View(category);

    return RedirectToRoute("Choose_your_dvd_Index");

    return View() ;
}

Я хочу перенаправить пользователя на "Choose-your-dvd", если он введет неверное имя категории? (т.е. URL-адрес в браузере изменяется)

Спасибо!

1 Ответ

0 голосов
/ 13 июня 2011

В вашем коде нет ничего плохого, кроме того факта, что вы должны использовать ActionResult в качестве типа возврата вместо ViewResult, потому что при перенаправлении представление не отображается.Метод RedirectToRoute возвращает RedirectToRouteResult, поэтому ваш код не будет компилироваться.Вот почему всегда рекомендуется, чтобы все сигнатуры методов действий вашего контроллера возвращали ActionResult, который является базовым классом:

public ActionResult Index()
{
     return View();
}

public ActionResult Category(string categoryName)
{
    var category = (db.Categories.Where(i => i.Name == categoryName).FirstOrDefault()) ?? null;
    if (category != null)
    {
        return View(category);
    }

    return RedirectToRoute("Choose_your_dvd_Index");
}

Предполагая, что ваши маршруты выглядят точно так, как вы показали в своем вопросе, если пользователь запрашивает, например, /choose-your-dvd/foobar и категория foobar не найдена в вашей базе данных, он будет правильно перенаправлен на действие Index на том же контроллере.

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