无法在 vb.net 中获取 Page.RouteData.Values

Can't fetch Page.RouteData.Values in vb.net

我正在尝试在 asp vb.net 应用程序上启用路由。

我遵循了接下来的步骤:

1)在global.asax中,有这段代码

<%@ Application Language="VB" %>
<%@ Import Namespace="System.Web.Optimization" %>
<%@ Import Namespace="System.Web.Routing" %>

<script runat="server">

    Sub Application_Start(sender As Object, e As EventArgs)
        RouteConfig.RegisterRoutes(RouteTable.Routes)
        BundleConfig.RegisterBundles(BundleTable.Bundles)
    End Sub
</script>

2) 在 RouteConfig.vb 我有这个:

Imports System.Web
Imports System.Web.Routing
Imports Microsoft.AspNet.FriendlyUrls

Public Module RouteConfig

    Public Sub RegisterRoutes(routes As RouteCollection)
        Dim settings = New FriendlyUrlSettings()
        settings.AutoRedirectMode = RedirectMode.Permanent
        routes.EnableFriendlyUrls(settings)
        routes.MapPageRoute("Services",
            "Services/{SID}",
            "~/Services.aspx")
    End Sub

End Module

3) 在services.aspx页,我写了这个

进口System.Web.Routing 部分 Class 服务 继承 System.Web.UI.Page

Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
    If Not Me.IsPostBack Then
        lblTest.Text = RouteData.Values("SID").ToString
    End If
End Sub

结束Class

当我 运行 页面时,我收到错误消息

"No object reference is specified in an object instance."

如果我删除 "lblTest.Text = RouteData.Values("SID").ToString" 行,它可以正常工作,当然没有 SID 参数

抱歉英语不好。

"No object reference is specified in an object instance" 除了常见的“对象引用未设置为对象的实例

被称为另一种表示 NullReferenceException =48=]”消息。既然你提到了这一行:

lblTest.Text = RouteData.Values("SID").ToString

RouteData.Values("SID") 包含 Nothing 并且 ToString 无法将 Nothing 设置为其源字符串时发生异常。您可以使用 RouteData.Values.ContainsKey:

检查 RouteData.Values 是否有 Nothing
If (Page.RouteData.Values.ContainsKey("SID")) Then
    lblTest.Text = RouteData.Values("SID").ToString
End If

由于您将 MapPageRouteFriendlyUrls 一起使用,我认为您需要将第二个参数中的 URL 重命名为另一个不同于物理 ASPX 文件名的名称,以防止 Nothing 作为 URL 参数传递:

' note 's' omitted in Service/{SID} route
routes.MapPageRoute("Services", "Service/{SID}", "~/Services.aspx")

然后,您可以尝试重新排序 RegisterRoutes 中的语句,以便 EnableFriendlyUrlsMapPageRoute 之后执行:

Public Module RouteConfig

    Public Sub RegisterRoutes(routes As RouteCollection)
        routes.MapPageRoute("Services", "Service/{SID}", "~/Services.aspx")

        Dim settings = New FriendlyUrlSettings()
        settings.AutoRedirectMode = RedirectMode.Permanent
        routes.EnableFriendlyUrls(settings)
    End Sub

End Module

类似问题:

FriendlyURLs - RouteData returns no value

Page.RouteData.Values are empty for one page but not another