我的MVC4路由,参数,构造函数有什么问题?

Kom*_*gem 1 c# routes visual-studio asp.net-mvc-4 visual-studio-2012

我正在写一个小应用程序的问题.现在要么我的错误在我的控制器类中,要么在路由中.见下图.

控制器类.

这是我试图执行的控制器

这是我的默认路线.

RouteConfig文件

这是我跑步时得到的错误.图像不是很清楚,但它说:

参数字典包含'GlobalUnited.WebUI.Controllers.PlayerController'中方法'System.Web.Mvc.ActionResult Detail(Int32)'的非可空类型'System.Int32'的参数'playerId'的空条目.可选参数必须是引用类型,可空类型,或者声明为可选参数.参数名称:参数

错误

我在这里阅读了一些帖子,特别是: 类似链接

当Daniel Renshaw说:

首先,我建议你使用MVC自动处理参数,而不是自己从请求中删除它们.你的控制器动作有一个id参数似乎被忽略了 - 使用它并添加其他类似参数来获取输入参数.

无论如何,在阅读该帖子后,我将RouteConfig文件更改为:

改变了路线

我仍然有这个错误.它说:

名为"DefaultApi"的路径已在路径集合中.路线名称必须是唯一的.参数名称:名称

路线

我甚至试图将我的Detail动作参数更改为:注意int?宣言 方法

我改变后得到了这个错误:

在此输入图像描述

有什么我可以做的来解决这个问题,不那么复杂吗?所有的帮助将不胜感激,谢谢.

Ufu*_*arı 6

您的参数名称playerID会导致此处出现问题.ASP.NET MVC只能使用默认路由为您提供名为id的参数.在您的情况下,它无法将请求映射到您的操作,因为playerID不可为空或可选.将参数名称更改为id将解决问题.

public ActionResult Detail(int id)
Run Code Online (Sandbox Code Playgroud)

路由注册会出现第二个错误,因为您已经有一个名为"DefaultApi"的路由.如果更改参数名称(也在其他地方注册),则不需要此路径.

第三个错误是尝试使用null值进行查询.ASP.NET MVC无法将URL中的值映射到您的参数,您将获得默认值null.由于没有一个空值的行,你得到一个空序列,然后Single()方法抛出一个异常.