开发者

MVC 3 Routing question

开发者 https://www.devze.com 2023-03-12 08:12 出处:网络
I am new to MVC, so sorry if this is a bit of a noob question: I am setting up some custom routes in global.asax.

I am new to MVC, so sorry if this is a bit of a noob question:

I am setting up some custom routes in 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" }
    );

Specifically, I am mapping "Choose-you-dvd/{categoryName}" to my DVD controller, where I have the following view result, as well as having the default "choose-your-dvd" page.

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() ;
}

I want to redirect the user to just "Choose-your-dvd" if they enter an invalid category name? (i.e. the URL in the browser changes)

Thanks开发者_C百科!


There is nothing wrong with your code other than the fact that you should use ActionResult as return type instead of ViewResult because when you redirect there is no view rendered. The RedirectToRoute method returns a RedirectToRouteResult so your code won't compile. That's why it's always best practice to have all your controller action method signatures return ActionResult which is the base class:

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

Assuming your routes look exactly as you have shown in your question if a user requests for example /choose-your-dvd/foobar and the foobar category is not found in your database he will correctly be redirected to the Index action on the same controller.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号