Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC路由参数为空_C#_Asp.net_Asp.net Mvc - Fatal编程技术网

C# MVC路由参数为空

C# MVC路由参数为空,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我收到以下错误,默认路由参数为空。我在URL中没有任何参数的控制器操作上使用了相同的代码,并且运行良好。我知道正在调用我的自定义路由,但我不明白为什么startIndex和pageSize在操作中显示为null 错误: 参数字典包含“AEO.WorkOrder.WebUI.Controllers.VendorComplianceController”中“System.Web.Mvc.ActionResult ViewVcByStatus(System.String,Int32,Int32)”方法

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

错误:

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

参数名称:参数

控制器:

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/PROCESSED">

将startIndex和pageSize与链接一起发送(我对其进行了硬编码,改用参数),您的actionresult期望链接需要提供的所有参数,MapRoute可能会成为默认路由,因为它无法与任何与您提供的一个参数匹配的其他路由匹配

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

试试这个

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?在您的行动方法中,这将为您完成工作。希望这有帮助。此解决方案将与您的问题“”中的url模式配合使用。

您是否有其他可能匹配的路由?此外,该url与此处显示的路由不匹配。唯一的其他路由是默认路由。我也尝试过,也得到了同样的结果。这很有效。在路由本身中指定默认参数不是为了避免在链接中指定它们吗?恰恰相反。您可以创建一个自定义路由,以便找到绕过MVC默认行为的方法。但不要轻率地使用这条路线,当大多数其他方法都失败时,它们是解决更困难情况的一种方法。尽可能多地尝试使用普通MVC模式,在逻辑和脚本中使用控制器,或者在视图中使用razor(例如)。这也将使其他开发人员更容易阅读代码。许多人不了解自定义路由。这是将参数标记为空以避免任何空输入错误的最佳实践。如果您想通过url传递它们,您可以使用VendorCompliance/ViewVcByStatus?status=PROCESSED&startIndex=10&pageSize=1。此外,还可以为参数指定默认值。有很多方法,基本上取决于您的需求。希望我能上飞机。路线部分是完全正确的,我应该指出,但错过了它。刚刚注意到你编辑的ActionResult也是正确的:)是的,你是对的。我已编辑了我的操作结果,以避免不必要的混淆。:)这是不对的。路由定义中不能有2个参数标记为
UrlParameter。可选
。只有最后一个可以是可选的。谢谢你的评论,我不认为只有一个可选参数是允许的。您可以有多个可选参数。此外,它工作良好。我已经测试过了。如果你有任何证据,请分享。也请检查此处的链接。
routes.MapRoute(
            name: "ViewVcByStatus",
            url: "ViewVcByStatus/{status}",
            defaults: new { controller = "VendorCompliance", action = "ViewVcByStatus", startIndex = UrlParameter.Optional, pageSize = UrlParameter.Optional });