当参数具有值时,带有可选参数的自定义路由仍会返回异常null

时间:2014-11-01 22:12:12

标签: c# asp.net-mvc

我有以下View代码,它返回当前项目的showid,并调用action来从其他动作加载节目的信息,并将其显示在局部视图中。

@{var bodyText = @x.title.ToString();
                        Int16 showid = Convert.ToInt16(@x.showId);
                     <img src=@Html.Action("_ShowThumbnail", "Thumbnail", showid); 

我的路线如下

 routes.MapRoute(
            name: "Thumbnail",
            url: "Thumbnail/_ShowThumbnail/{showid}",
            defaults: new { controller = "Thumbnail",  action = "_ShowThumbnail", showid = UrlParameter.Optional }
        );

我的行动

 public ActionResult _ShowThumbnail(Int16 showid)
        {
            try
            {
                WebClient webClient = new WebClient();
                var programs = webClient.DownloadString("

使用debug我在所有位置都看到了showid的正确值,但仍然得到Null异常。有人有想法吗?

1 个答案:

答案 0 :(得分:0)

第一个问题是您的showid变量与{showid}占位符不匹配。相反,您只是将Int16值作为匿名参数对象传递给Html.Action()方法,该方法不会做任何事情。

第二个问题是虽然{showid}占位符在路径中是可选的,但方法参数仍然是Int16因此是必需的 - 因此您需要将其置为可空({{1} })或将方法的Int16? showid版本添加到控制器。

如果要修复ActionResult _ShowThumbnail()调用,则需要正确设置匿名对象:

Html.Action()