asp.net Mvc中提示参数字典包含一个 null 项。可选参数必须为引用类型、可以为 null 的类型或声明为可选参数

scy251147 2011-07-27 11:29:01
我的asp.net mvc代码如下:

[HandleError]
public class DefaultController:Controller
{

MyNewsDataContext news = new MyNewsDataContext();

public ActionResult Default()
{
IQueryable<tbNews> queryNews = news.tbNews.OrderByDescending(d=>d.NewsDate);

return View(queryNews);
}

[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Edit(int NewsID)
{
var model = news.tbNews.First(c=>c.NewsID==NewsID);
return View(model);
}
}

当我点击Default.aspx页面上的Edit链接的时候,提示如下错误:
“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------

对于“MVCNews.Controllers.DefaultController”中方法“System.Web.Mvc.ActionResult Edit(Int32)”的不可以为 null 的类型“System.Int32”的参数“NewsID”,参数字典包含一个 null 项。可选参数必须为引用类型、可以为 null 的类型或声明为可选参数。
参数名: parameters


我知道除了将NewsID修改成id可以完成外,还可以修改路由,这个路由该怎么修改呢?原来的路由中已经有了下面这个:

routes.MapRoute(
"Default", // 路由名称
"{controller}/{action}/{id}", // 带有参数的 URL
new { controller = "Default", action = "Default", id = UrlParameter.Optional } // 参数默认值
);
...全文
4555 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
langmafeng 2011-07-28
  • 打赏
  • 举报
回复
路由可改成:
routes.MapRoute(
"Default", // 路由名称
"{controller}/{action}/{NewsID}", // 带有参数的 URL
new { controller = "Default", action = "Default", id = UrlParameter.Optional } // 参数默认值
);
claymore1114 2011-07-28
  • 打赏
  • 举报
回复
默认的路由 不要改,添加一个路由,放在 默认路由的前面。
Lisliefor 2011-07-28
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 sandy945 的回复:]

简单的办法是
public ActionResult Edit(int NewsID)
=》
public ActionResult Edit(int? NewsID)
[/Quote]

这个可以解决报错的问题,但是,就取不到id了。
10楼的办法可取,很简单的一个问题嘛!用id就行了,何必执著于action的参数名呢?这个对于用户来说,是不透明的,他们看到的url中的id是数值。
阿非 2011-07-28
  • 打赏
  • 举报
回复
简单的办法是
public ActionResult Edit(int NewsID)
=》
public ActionResult Edit(int? NewsID)

阿非 2011-07-28
  • 打赏
  • 举报
回复

routes.MapRoute(
"Default", // 路由名称
"{controller}/{action}/{id}", // 带有参数的 URL
new { controller = "Default", action = "Default", id = UrlParameter.Optional } // 参数默认值
);


=>

routes.MapRoute(
"Default", // 路由名称
"{controller}/{action}/{NewsID}", // 带有参数的 URL
new { controller = "Default", action = "Default", NewsID = UrlParameter.Optional } // 参数默认值
);

scy251147 2011-07-28
  • 打赏
  • 举报
回复
你看看如何解决,我倒是挺郁闷的
scy251147 2011-07-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 langmafeng 的回复:]
路由可改成:
routes.MapRoute(
"Default", // 路由名称
"{controller}/{action}/{NewsID}", // 带有参数的 URL
new { controller = "Default", action = "Default", id = UrlParameter.Optional } // 参数默认值
);
[/Quote]恩 修改成这也也不行,还是报错
scy251147 2011-07-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wxr0323 的回复:]
友情UP

看字面的意思

Edit的参数为null
[/Quote]
恩 ,是的 并且调试也进不去
haojuntu 2011-07-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wxr0323 的回复:]

友情UP

看字面的意思

Edit的参数为null
[/Quote]

子夜挺给力啊。。
haojuntu 2011-07-27
  • 打赏
  • 举报
回复
这个地方var model = news.tbNews.First(c=>c.NewsID==NewsID);
调试一下,看NewsID传进来了没,如果model为空,在返回页面,可能报那个错误,至于路由不是很清楚。。
等待高手解答。。
子夜__ 2011-07-27
  • 打赏
  • 举报
回复
友情UP

看字面的意思

Edit的参数为null
scy251147 2011-07-27
  • 打赏
  • 举报
回复
谢谢回答
scy251147 2011-07-27
  • 打赏
  • 举报
回复
顶起,谢谢回答啦,嘎嘎

62,234

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧