0

我正在通过音乐商店教程学习 ASP.net MVC 3——但将 C# 转换为 VB。http://www.asp.net/mvc/tutorials/mvc-music-store/mvc-music-store-part-2

Jon Galloway 说“ASP.NET MVC 的默认路由约定是将操作方法​​名称之后的 URL 段视为名为“ID”的参数。

我的 StoreController 中有以下代码

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

但是当我输入网址时,http://localhost:53867/store/details/5我收到以下服务器错误

参数字典包含“MvcMusicStore.MvcMusicStore.StoreController”中方法“System.String Details(Int32)”的不可空类型“System.Int32”的参数“i”的空条目。可选参数必须是引用类型、可空类型或声明为可选参数。参数名称:参数

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

4

3 回答 3

1

我在您的代码中注意到的一些您可能想要检查的事情。

  1. 在您的函数体中,您正在调用 i.ToString,但将 id 作为参数传入
  2. VB不需要函数参数的ByVal前言吗?
  3. 这是您项目中的复制/粘贴还是您输入的?听起来 5 被分配给默认路由中的 ID,但是您似乎使用 i 作为参数,它为空,因为它不是路由的一部分,并且您没有将其作为查询字符串参数传递
于 2012-08-08T18:02:01.107 回答
0

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

就您的错误而言,我想知道 VB 是如何翻译路线的?在您拥有的链接中,在您获得“商店详细信息”之前,有一个“/Store/Browse?genre=Disco”示例。这在您的应用程序中有效吗?

我可能是错的,但看起来这个链接将有助于解决路由问题,尤其是清单 4 (带有可为空参数的索引操作)

其要点是...

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

...可能对你有用,或者至少类似的东西。

于 2012-08-08T18:09:08.183 回答
0

错误是你放了i而不是id,只是一个拼写错误的变量名

Function Details(ByVal id As Integer) As String
      Return "Store Details, ID= " & id.ToString()
End Function
于 2014-09-15T09:35:06.403 回答