MVC路由参数是空的

时间:2016-07-05 19:28:23

标签: c# asp.net asp.net-mvc

我收到以下错误,我的默认路由参数为null。我在一个控制器动作上使用了相同的代码,该动作在URL中没有任何参数,并且工作正常。我知道我的自定义路由被调用但我不明白为什么startIndex和pageSize在操作中显示为null。

错误:

  

参数字典包含'AEO中方法'System.Web.Mvc.ActionResult ViewVcByStatus(System.String,Int32,Int32)'的非可空类型'System.Int32'的参数'startIndex'的空条目。 WorkOrder.WebUI.Controllers.VendorComplianceController”。可选参数必须是引用类型,可空类型,或者声明为可选参数。

     

参数名称:参数

控制器:

public ActionResult ViewVcByStatus(string status, int startIndex, int pageSize) { ... }

路线:

routes.MapRoute("ViewVcByStatus", "ViewVcByStatus/{status}",
  new
  {
    controller = "VendorCompliance",
    action = "ViewVcByStatus",
    startIndex = 0,
    pageSize = WebConfigurationManager.AppSettings["PageSize"],
   });

链接:

<a href="VendorCompliance/ViewVcByStatus?status=PROCESSED">

还尝试了这个产生相同错误的链接:

<a href="VendorCompliance/ViewVcByStatus/PROCESSED">

2 个答案:

答案 0 :(得分:3)

试试这个。

public ActionResult ViewVcByStatus(string status, int? pageSize, int?startIndex)
    {
        return View();
    }

Route.config

routes.MapRoute(
            name: "ViewVcByStatus",
            url: "ViewVcByStatus/{status}",
            defaults: new { controller = "VendorCompliance", action = "ViewVcByStatus", startIndex = UrlParameter.Optional, pageSize = UrlParameter.Optional });

可选参数应该在routeconfig中声明为可选,并将它们标记为int?在你的行动方法中,这将为你工作。希望这会有所帮助。此解决方案将在您的问题“http://localhost:53290/VendorCompliance/ViewVcByStatus?status=PROCESSED”中使用您的网址模式。

答案 1 :(得分:1)

使用链接发送startIndex和pageSize(我硬编码,改用参数),你的actionresult期望链接需要提供的所有参数,并且MapRoute可能会掉到默认路由,因为它不能匹配它与任何其他路线匹配您提供的一个参数

<a href="VendorCompliance/ViewVcByStatus?status=PROCESSED&startIndex=0&pageSize=0">