MVC控制器不接收参数值

时间:2018-07-25 21:31:18

标签: asp.net-mvc model-view-controller .net-4.6.1

无论我如何设置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

我现在很茫然。任何建议表示赞赏。

2 个答案:

答案 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"}
);