加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 当MVC路由触发时,在控制器中获取空参数值

发布时间:2020-12-16 07:09:17 所属栏目:asp.Net 来源:网络整理
导读:首先,我是MVC的新手,所以请原谅这个问题是否基本. 我正在使用自定义路由创建以下URL(http://mysite/subscriber/12345),其中12345是订户号.我希望它在Subscriber控制器中运行ShowAll操作.我的路由是触发并使用Phil’s route debugger,当我传入上面的url时,路
首先,我是MVC的新手,所以请原谅这个问题是否基本.

我正在使用自定义路由创建以下URL(http://mysite/subscriber/12345),其中12345是订户号.我希望它在Subscriber控制器中运行ShowAll操作.我的路由是触发并使用Phil’s route debugger,当我传入上面的url时,路由调试器显示ID为12345.
我的控制器正在接受一个int作为subscriberID.当它发射时,
控制器抛出错误

The parameters dictionary contains a null entry for parameter ‘id’ of non-nullable type ‘System.Int32″.

为什么路由调试器显示一个值而控制器没有看到它?

这是我的路线(第一个是罪魁祸首)

routes.MapRoute(
              "SubscriberAll","subscriber/{id}",new { controller = "Subscriber",action = "ShowAll",id=0 },new { id = @"d+" } //confirm numeric
            );

            routes.MapRoute(
                "Default",// Route name
                "{controller}/{action}/{id}",// URL with parameters
                new { controller = "Home",action = "Index",id = UrlParameter.Optional } // Parameter defaults
            );

知道为什么我在ShowAll动作中得到null吗?这是动作方法签名:

public ActionResult ShowAll(int id)

解决方法

发现控制器方法签名需要接受一个字符串,因为MVC不知道传递参数是什么类型,因此无法将其转换为int,但它可以通过约束强制执行它.

所以,我最终得到的路线是这样的:

routes.MapRoute(
“SubscriberAll”,
“subscriber/{id}”,
new {controller = “Subscriber”,action = “ShowAll” },
new {id = @”d+” } //confirm numeric
);

我最终得到的控制器方法签名就是这个

public ActionResult ShowAll(string id)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读