2012-08-08 66 views
0

我正在学习与音乐商店教程的ASP.net MVC 3 - 但将C#翻译成VB。 http://www.asp.net/mvc/tutorials/mvc-music-store/mvc-music-store-part-2mvc 3音乐商店教程:

乔恩·加洛韦说:“ASP.NET MVC的默认路由公约是操作方法的名字作为命名参数后治疗URL的段‘ID’。

我在StoreController下面的代码

Function Details(id As Integer) As String 
     Return "Store Details, ID= " & i.ToString 
    End Function 

但是,当我把在url http://localhost:53867/store/details/5我得到以下服务器错误

参数字典包含NUL在'MvcMusicStore.MvcMusicStore.StoreController'中的方法'System.String Details(Int32)'的 不可空类型'System.Int32'的参数'i'的条目。一个 可选参数必须是一个引用类型,一个可为空的类型,或者是作为可选参数声明的 。参数名称:参数

根据Galloway对上述默认ID参数的描述,我期望此方法将URL末尾的5作为(默认)参数。为什么它出现空?我错过了什么?

回答

1

我注意到了一些你可能想要检查的代码。

  1. 在函数体内,你在呼唤i.ToString,但ID为传递参数
  2. 不VB需要显示ByVal序言的功能参数?
  3. 这是从您的项目中复制/粘贴的,还是您输入的?这听起来像5被分配给默认路由中的ID,但您似乎将i用作参数,它是空的,因为它不是路由的一部分,并且您没有将它作为查询字符串参数传递
+0

这是一个愚蠢的错误,我代替。我有参数名称作为我而不是id,但当它不工作时将其更改为id。然后我运行该应用程序,但它没有重建,因为您在#1中指出了错误。所以它看起来应用程序即使在var被命名为id时也会生成错误。实际上,我正在运行一个构建,其中var被命名为i,所以它仍然不起作用。无论如何,感谢您的帮助。 – bernie2436 2012-08-08 19:14:20

+0

@ akh2103 - 我们都在那里,没有汗水。很高兴你得到它的工作 – Tommy 2012-08-08 19:22:47

0

我不知道VB,但我确实使用(除其他之外)C#。

就你的错误而言,我想知道VB如何转换路线?在您拥有的链接中,在获取“商店详情”之前,有一个“/ Store/Browse?genre = Disco”的例子。在你的应用程序中工作?

我可能是错的,但它看起来像这个link将有助于路由问题,特别是清单4 (带空参数的索引操作)

的那个要点是......

Function Details(ByVal id? As Integer) As String 
    Return "Store Details, ID= " & i.ToString 
End Function 

...可能为你工作,或者至少类似的东西。

+0

VB处理路由相同的C#。您看到的示例是因为开箱即用,没有处理流派参数的路由,因此它将成为查询字符串值。 – Tommy 2012-08-08 18:13:58

0

的错误是,你把ID,只是一个拼写错误的变量名

Function Details(ByVal id As Integer) As String 
     Return "Store Details, ID= " & id.ToString() 
End Function