C# MVC路由参数为空
我收到以下错误,默认路由参数为空。我在URL中没有任何参数的控制器操作上使用了相同的代码,并且运行良好。我知道正在调用我的自定义路由,但我不明白为什么startIndex和pageSize在操作中显示为null 错误: 参数字典包含“AEO.WorkOrder.WebUI.Controllers.VendorComplianceController”中“System.Web.Mvc.ActionResult ViewVcByStatus(System.String,Int32,Int32)”方法的不可为空类型“System.Int32”的参数“startIndex”的空条目。可选参数必须是引用类型、可为null的类型或声明为可选参数 参数名称:参数 控制器: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)”方法
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 });