无论我如何设置URL格式,都会出现空参数异常。我已经尝试过我现在能想到的所有方法。它正在工作,然后就停止了。因此,我还原了我的上一次更改,以查看是否可以解决该问题,但是没有解决。现在,即使在以前的(有效的)副本中,它也不起作用。我也遇到了编译器错误,因此我清理了解决方案,重新构建,重新启动了计算机(和VS),仍然一无所获。
这不是路由映射的问题。当我尝试搜索问题时,便能找到这些。为了确保我确实玩了很多。
我收到以下错误消息:
参数字典包含参数“ id”的空条目 方法的非空类型'System.Guid' 中的'System.Web.Mvc.ActionResult ViewJobs(System.Guid)' 'MyProject.Controllers.RecruitingController'。可选参数 必须是引用类型,可为null的类型,或声明为 可选参数。参数名称:参数
我的方法看起来像这样(非常典型):
public class RecruitingController : Controller
{
public ActionResult ViewJobs(Guid id)
{
var ListView = RecruitingLogic.GetListView(id);
return View("ViewJobs", ListView);
}
}
注意:我曾尝试将其更改为可为空的guid,但这没有用。老实说,我没想到会这样。我也尝试将动作移至另一个控制器。那也行不通。
注释2 :我确实发现这是空的。这不是无效的错误消息。我也有动作/参数记录设置作为动作过滤器,因此我可以回头查找并找到停止工作的确切时间。您会看到该操作接收到非null值,然后bam,它刚刚停止。
路线映射:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
在网址方面,我尝试了很多。但是,这些是为我工作的少数几个...直到他们停下来为止。
https://localhost:12345/recruiting/viewjobs/B77A156-622C-E811-80D4-005056865C51 https://localhost:12345/recruiting/viewjobs?id=B77A156-622C-E811-80D4-005056865C51 https://localhost:12345/recruiting/viewjobs/?id=B77A156-622C-E811-80D4-005056865C51
我现在很茫然。任何建议表示赞赏。
答案 0 :(得分:0)
由于路由配置的大小写为id
,可以更新操作签名以使用小写的id
参数并尝试。
public ActionResult ViewJobs(Guid id)
答案 1 :(得分:0)
您可能已经将可选URL参数(UrlParameter.Optional)与action方法本身的可选参数混淆了。路由表正在尝试查找允许使用可选id参数的操作,但Guid默认情况下不可为空。试试
public class RecruitingController : Controller
{
public ActionResult ViewJobs(Guid? id)
{
var ListView = RecruitingLogic.GetListView(id);
return View("ViewJobs", ListView);
}
}
或
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index"}
);