gpt4 book ai didi

c# - asp.net-mvc 路由问题 : parameters dictionary contains a null entry for parameter

转载 作者:太空狗 更新时间:2023-10-29 22:32:53 25 4
gpt4 key购买 nike

我正在尝试使用以下映射路由设置自定义路由

编辑:我的完整路由配置

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

#region FixtureAdmin

routes.MapRoute(
name: "FixtureEdit",
url: "{controller}/{action}/{id}",
defaults: new { controller = "FixtureAdmin", action = "Edit", id = UrlParameter.Optional }
);

#endregion

#region Results

routes.MapRoute(
name: "ResultAdd",
url: "{controller}/{action}/{fixtureId}",
defaults: new { controller = "Result", action = "Add", fixtureId = UrlParameter.Optional }
);

#endregion

还有我的 Controller 代码

public ActionResult Add(int fixtureId)
{
// return model to view etc..
}

尽管我已将参数指定为可选参数,但出现了异常。

The parameters dictionary contains a null entry for parameter 'fixtureId'

奇怪的是,如果我将 Add 操作的参数更改为“Id”,那么以下 URL 将起作用 Result/Add/1。我很困惑,是否有一些默认路由覆盖了我的自定义路由?为什么将参数更改为仅“Id”有效?

编辑

为了测试,我在 Action 中添加了另一个参数

public ActionResult Add(int? fixtureId, int? testId)

然后我相应地编辑了路由,现在它可以工作了,所以我认为这是默认路由的问题。

最佳答案

在您的 Controller 操作中使用可为空的整数。

public ActionResult Add(int? fixtureId)
{
// return model to view etc..
}

但问题是,如果这确实是一个 ID,如果用户请求一个 null/空白 ID,它会如何 react ?该 ID 是您数据库中的 key 吗?如果您能够处理或提供默认页面(如果 ID 为空/空),则可以将其设置为可空。

编辑:

这是因为 ASP.NET 会假定您请求中的未识别参数是 id,在您的例子中是 Results/Add/11 不明。如果您想让该代码使用 fixtureId,您应该使用 Results/Add?fixureId=1。所以归根结底,这不是因为路由,而是因为您拥有的 Action 中的参数。

编辑 2:

此外,您遇到的情况称为路由冲突。您的路线与 Default 冲突。您可以尝试申请constraints .

关于c# - asp.net-mvc 路由问题 : parameters dictionary contains a null entry for parameter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16894263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com