码迷,mamicode.com
首页 > Web开发 > 详细

【转】Controllers and Routers in ASP.NET MVC 3

时间:2014-10-15 18:27:51      阅读:279      评论:0      收藏:0      [点我收藏+]

标签:des   style   http   color   io   ar   for   strong   sp   

Controllers and Routers in ASP.NET MVC 3

bubuko.com,布布扣

ambilykk, 3 May 2011 CPOL

bubuko.com,布布扣

bubuko.com,布布扣

4.79 (23 votes)

Rate:

vote 1vote 2vote 3vote 4vote 5

A deeper look into the two pillars of ASP.NET MVC – Routers and Controllers.

Introduction

ASP.NET MVC provides a new way of creating web applications which is more extensible and testable. We discussed about ASP.NET MVC in Introduction to ASP.NET MVC 3. Here, we will have a deeper look into the two pillars of ASP.NET MVC – Routers and Controllers.

Routers

One of the main objectives of ASP.NET MVC is Search Engine Optimization (SEO). Search Engines work mainly using URLs. Defining a meaningful and more understandable URL is very important to make our application more search engine friendly.

Routing is the way of constructing meaningful URLs for a web request. As you have already seen, our MVC application URLs are not represented by extensions like .aspx. Instead, the URLs consist of the Controller name and Action name.

Let us first understand how the default routing works. Open the Global.ascx file, and we can see theApplication_Start() and RegisterRoute() methods.

bubuko.com,布布扣 Collapse | Copy Code

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
 
    routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
            // Parameter defaults
    );
}

Look at the statement where we map the routing. Our URL formation uses the pattern “{controller}/{action}/{id}", where id is an optional parameter.

new { controller = "Home", action = "Index", id = UrlParameter.Optional } specifies that in case the URL does not specify a Controller, use the Home Controller. Also, in the absence of an Action, it uses the Index action, and the last parameter is Optional.

Routing data inside a Controller

We can access routing data inside a Controller using the RouteData object.

bubuko.com,布布扣 Collapse | Copy Code

public ActionResult Index()
{
    ViewBag.Message = string.Format("{0}---{1}--{2}",
        RouteData.Values["Controller"],
        RouteData.Values["action"],
        RouteData.Values["id"]
        );
            
    return View();
}

bubuko.com,布布扣

Controllers

Now let us create a new Controller and see how we can route to the new Controller using a different routing pattern.

Add a new Controller using Add New Item -> Controller. It adds a new Controller with an Action as Index. For our sample application, we are using a different Action called Verify.

bubuko.com,布布扣 Collapse | Copy Code

public class SampleController : Controller
{
    //
    // GET: /Sample/
 
    public ActionResult Verify()
    {
        return View();
    }
}

As there are no Views corresponding to SampleController, let us return some text from our Action. For returning any text data from an Action, use the Content class.

bubuko.com,布布扣 Collapse | Copy Code

public ActionResult Verify()
{
    return Content("Hello From Sample Controller.");
}

Let us run the application. Modify the URL to /sample/verify.

bubuko.com,布布扣

But if we specify /Sample without any Action, we will receive a 404 error. As per the defined routing, if there is no Action specified, it should redirect to the Index action inside the specified Controller. Here, our SampleControllerdoesn’t have any Index action and throws an error.

bubuko.com,布布扣

Adding a new route

For fixing the above issue, let us define a new route called “sample”.

bubuko.com,布布扣 Collapse | Copy Code

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
                "sample",
                "Sample/{action}",
                new { controller = "Sample", action = "Verify" }
                );

   // 这个一定要放在Default前面,否则会找不到 
    routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", 
                      id = UrlParameter.Optional } // Parameter defaults
            );

}

bubuko.com,布布扣

Now we may need to pass some data to our new Controller from a URL, like the id parameter in the default routing. For that, define a new parameter in the routing.

bubuko.com,布布扣 Collapse | Copy Code

routes.MapRoute(
                "sample",
                "Sample/{username}",
                new { controller = "Sample", action = "Verify" }
                );

The value can be accessed either using the RouteData object or through a parameter to the Verify action.

bubuko.com,布布扣 Collapse | Copy Code

public ActionResult Verify(string username)
{
    return Content(username);
}

Note that the URL consists of only the Controller and the parameter.

bubuko.com,布布扣

Again, you will receive a 404 error when we omit the parameter value.

bubuko.com,布布扣

For solving this issue, we need to specify the default value for the username parameter either in the Route mapping or in the Controller.

In the route map, specify the parameter as optional.

bubuko.com,布布扣 Collapse | Copy Code

routes.MapRoute(
                "sample",
                "Sample/{username}",
                new { controller = "Sample", action = "Verify", 
                      username=UrlParameter.Optional }
                );

Inside the Controller, specify the default value for the parameter.

bubuko.com,布布扣 Collapse | Copy Code

public ActionResult Verify(string username="all")
{
    return Content(username);
}

Conclusion

We had a quick discussion on how routing works in ASP.NET MVC and how we can customize the same. We will discuss more about Views, Styles, Action results, etc., in the next article.

【转】Controllers and Routers in ASP.NET MVC 3

标签:des   style   http   color   io   ar   for   strong   sp   

原文地址:http://www.cnblogs.com/dufu/p/4026478.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!