Ellbar
Ellbar

Reputation: 4054

How to set up specific routing in mvc3 web application

I have problem with routing. I have many pages on my site generated dynamically from database.

First thing which I want to accomplish is to route to these pages like that:

"How to repair a car"

www.EXAMPLE.com/How-to-repair-a-car

For now it works like that: www.EXAMPLE.com/Home/Index/How-to-repair-a-car

Secondly my default page have to be like that: www.EXAMPLE.com

On the Start Page will be news with pagging, so if someone click for instance in the "page 2" button, the address should looks: www.EXAMPLE.com/page =2

CONCLUSION:

  1. default page -> www.EXAMPLE.com (with page = 0)
  2. default page with specific page of news -> www.EXAMPLE.com/page=12
  3. article page -> www.EXAMPLE.com/How-to-repair-car (without parameter 'page') routing sholud point to article or error404

PS: sorry for my english

Upvotes: 3

Views: 145

Answers (2)

testCoder
testCoder

Reputation: 7385

Try to create route for articles in routing config, like this:

Routing config:

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

            routes.MapRoute(null, "{article}",
                            new {controller = "Home", action = "Article" });
            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }
    }

HomeController:

public class HomeController : Controller
    {
        public ActionResult Index(int? page)
        {
            var definedPage = page ?? 0;
            ViewBag.page = "your page is " + definedPage;
            return View();
        }

        public ActionResult Article(string article)
        {
            ViewBag.article = article;
            return View();
        }
    }

/?page=10 - works

/How-to-repair-car - works

That approach excellent works.

Upvotes: 1

Christian Westman
Christian Westman

Reputation: 3005

Here is a basic routing example for www.example.com/How-to-repair-car

using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace Tipser.Web
{
    public class MyMvcApplication : HttpApplication
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.MapRoute(
                "ArticleRoute",
                "{articleName}",
                new { Controller = "Home", Action = "Index", articleName = UrlParameter.Optional },
                new { userFriendlyURL = new ArticleConstraint() }
                );
        }

        public class ArticleConstraint : IRouteConstraint
        {
            public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
            {
                var articleName = values["articleName"] as string;
                //determine if there is a valid article
                if (there_is_there_any_article_matching(articleName))
                    return true;
                return false;
            }
        }
    }
}

Upvotes: 0

Related Questions