ASP.NET MVC URL Routing with ControllerName/ExampleID

i'm getting this error when i'm navigate browser to url:

localhost:10793/RealEstates/10

this my RouteConfig code:

    public class RouteConfig
    {
       public static void RegisterRoutes(RouteCollection routes)
       {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}",
            defaults: new { controller = "Main", action = "Index" }
        );
        routes.MapRoute(
            name: "RealEstates",
            url: "RealEstates/{action}",
            defaults: new { controller = "RealEstates", action = "Index" }
        );
        routes.MapRoute(
            name: "RealEstatesViewAd",
            url: "RealEstates/{id}",
            defaults: new { controller = "RealEstates", action = "ViewAd", id = UrlParameter.Optional }
        );
    }

}

my error:

Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable.  Please review the following URL and make sure that it is spelled correctly. 

when changed code to:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        //routes.MapRoute(
        //    name: "Default",
        //    url: "{controller}/{action}",
        //    defaults: new { controller = "Main", action = "Index" }
        //);
        //routes.MapRoute(
        //    name: "RealEstates",
        //    url: "RealEstates/{action}",
        //    defaults: new { controller = "RealEstates", action = "Index" }
        //);
        routes.MapRoute(
            name: "RealEstatesViewAd",
            url: "RealEstates/{id}",
            defaults: new { controller = "RealEstates", action = "ViewAd", id = UrlParameter.Optional }
        );
    }

}

it's work but when i call on other actions in controller

localhost:10793/RealEstates/CreateAd

this error found

The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult ViewAd(Int32)' in 'Youe3lan.Controllers.RealEstatesController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter. Parameter name: parameters

and this my controller:

    namespace MvcAppliction1.Controllers
{    
    public class RealEstatesController : Controller
    {        
        public ActionResult Index()
        {
            return View();
        }
        public ActionResult ViewAd(int id)
        {
            return View();
        }
        public ActionResult CreateAd()
        {
            return View();
        }
    }
}

You need to change it to:

routes.MapRoute(
        name: "RealEstatesViewAd",
        url: "RealEstates/{action}/{id}",
        defaults: new { controller = "RealEstates", action = "ViewAd", id UrlParameter.Optional }
    );}}

Have a look here it might help:

http://msdn.microsoft.com/en-us/library/cc668201(v=vs.100).aspx

UPDATE

Add this to your controller:

public ActionResult ViewAd(Int32 id)
{
    return View();
}

You see

localhost:10793/RealEstates/10

is translated to:

localhost:10793/RealEstates/ViewAdd/10

So you need that method in the controller accepting an it parameter.


you've flagged your id in your route as optional:

id = UrlParameter.Optional

but I bet your controller isn't nullable??

public ActionResult ViewAd(Int32 id)
{

}

So you cant post a null into your id even though the route allows it. If you change this to:

public ActionResult ViewAd(Int32? id)
{

}

You won't get the error message:

The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult ViewAd(Int32)' in 'Youe3lan.Controllers.RealEstatesController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter. Parameter name: parameters

链接地址: http://www.djcxy.com/p/39226.html

上一篇: 带有参数的ASP.Net MVC路由问题

下一篇: 带有ControllerName / ExampleID的ASP.NET MVC URL路由