MVC控制器操作参数为空

时间:2014-01-29 17:03:44

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我有控制器名称:区域和操作名称:Incharges但是我希望URL像这样(带有一些参数的动作名称)

www.example.com/district/incharges/aaa

www.example.com/district/incharges/bbb

www.example.com/district/incharges/ccc

但是,调试teamName时总是在action参数中返回NULL。

路由

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

            routes.MapRoute(
            "DistrictDetails",
            "District/Incharges/{teamName}",
            new { controller = "District", action = "Incharges" }
            ); 

控制器

但是,调试teamName时总是在action参数中返回NULL。

public class DistrictController : Controller
    {     


        public ActionResult Incharges(string teamName)
        {
            InchargePresentationVM INPVM = new InchargePresentationVM();
            INPVM.InitializePath(teamName, string.Empty);
            return View("", INPVM);
        }
}

查看

@{
    ViewBag.Title = "Index";
}

<h2>Index About</h2>

2 个答案:

答案 0 :(得分:17)

您必须申报第一个

的具体路线
routes.MapRoute(
            "DistrictDetails",
            "District/Incharges/{teamName}",
            new { controller = "District", action = "Incharges", id = UrlParameter.Optional }

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

答案 1 :(得分:1)

ASP.NET MVC DefaultModelBinder将尝试对值提供程序中的值进行隐式类型转换,例如。 form,to action方法参数。如果它尝试将类型从值提供程序转换为参数并且无法执行此操作,则会为参数指定null。

关于路由,ASP.NET MVC具有通过配置进行转换的概念。如果您按照转换,那么而不是配置。您可以保留默认路由,并始终通过命名控制器,操作方法和参数名称来获得所需的路由。

使用约定优于配置,您必须保留默认的HomeController,它是应用程序的入口点,然后命名其他控制器,如下所示。这些可以符合您想要的路线名称。

    namespace ConversionOverConfiguration
    {

      public class  DistrictController: Controller
      {
         public ActionResult Incharges(int aaa)
         {
            //You implementation here

             return View();
         }

      }

    }
The route will look as below if you have this conversion implementation
    //Controller/ActionMethod/ActionMethodParameter
    //District/Incharges/aaa

这将为您提供域URI:www.example.com/district/incharges/aaa。如果操作方法参数类型是字符串,则域URI为:www.example.com/district/incharges/?aaa = name 是一个字符串。然后,您可以保留ASP.NET MVC默认路由

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