WEIRDEST ERROR EVER:ASP.NET和Firefox?

时间:2009-06-16 15:13:49

标签: asp.net firefox

我一直认为服务器端代码不受请求它的浏览器的影响,但我只是遇到了异常:

我有一个按钮,当单击它时,更改按钮的CSS类(以及相对于它的那些)并使用新数据重新绑定GridView。功能如下:

Private Sub lbViewUnUsed_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lbViewUnUsed.Click
    lbViewUsed.CssClass = "button small"
    lbViewUnUsed.CssClass = "button small selected"
    BindUsage(UsageBinding.UnUsed)
End Sub

在IE中,这非常有效。但是,在Firefox中,BindUsage()函数在中途停止发射,根本没有任何结果!令我沮丧的是,我在Debug.Assert()的每行代码后面插入了BindUsage()语句,看看发生了什么,果然,该功能不会在Firefox中完全通过。

BindUsage()函数就是这个(调试断言仍然存在):

Private Sub BindUsage(ByVal bindWhat As UsageBinding)
    Debug.Assert(False, 1)

    If bindWhat = UsageBinding.Used Then
        gvUsage.DataSource = sUser.GetWordsMarkedWithUsage(True)
        gvUsage.Columns(0).Visible = False 'hide button column'
    Else
        Debug.Assert(False, 2)

        gvUsage.DataSource = sUser.GetWordsMarkedWithUsage(False)
        Debug.Assert(False, 3)

        Dim userInfo As UserAccount.LoginInfo = UserAccount.GetUserLoginInfo
        Debug.Assert(False, 4)

        Dim showUsedButton As Boolean
        Debug.Assert(False, 5)

        showUsedButton = (userInfo.UserName.ToLowerInvariant = sUser.UserName.ToLowerInvariant)
                       Debug.Assert(False, 6)

        gvUsage.Columns(0).Visible = showUsedButton 'show button column'
        Debug.Assert(False, 7)

    End If
    Debug.Assert(False, 8)

    gvUsage.DataBind()
    Debug.Assert(False, 9)

End Sub

上述功能在Firefox中没有超过5。我猜测showUsedButton变量的分配存在某种问题,但我无法弄清楚它会是什么。为什么这只会在Firefox中失败,但在其他任何浏览器中都不会失败,特别是因为这是在服务器上发生的?

3 个答案:

答案 0 :(得分:4)

它发生在服务器上,但您正在检索客户端生成的数据:

  

UserAccount.GetUserLoginInfo

我会检查您存储的数据,并根据客户端应用程序查看其中的不同之处,看看它是如何处理的。

答案 1 :(得分:3)

嗯,这是一个猜测,但是......

UserAccount.GetUserLoginInfo究竟做了什么?如果我不得不猜测,它会尝试做一些特定于浏览器的事情。例如,它可以尝试从客户端读取cookie?如果是,那么我的下一个猜测是userInfouserInfo.UserName为空,因此抛出NullReferenceException。

可能是IE接受cookie,而firefox则不接受。因此IE中没有错误,但仅限于Firefox。 再一次,这是猜测,我在VB.NET中并不强大,也不知道UserAccount类是什么。也许如果你使用错误消息,它可能意味着更多。

答案 2 :(得分:1)

如果有任何例外被抛出,你肯定会发现吗?如果没有,请在执行任何其他操作之前解决此问题。

至于为什么它可能是浏览器特定的:

  • 如果它取决于浏览器发送的数据以及如何,那么显然浏览器可以改变行为
  • 我相信ASP.NET以特定于浏览器的方式呈现;如果您的代码触及渲染逻辑,则可能会因用户代理而有所不同。
相关问题