我一直认为服务器端代码不受请求它的浏览器的影响,但我只是遇到了异常:
我有一个按钮,当单击它时,更改按钮的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中失败,但在其他任何浏览器中都不会失败,特别是因为这是在服务器上发生的?
答案 0 :(得分:4)
它发生在服务器上,但您正在检索客户端生成的数据:
UserAccount.GetUserLoginInfo
我会检查您存储的数据,并根据客户端应用程序查看其中的不同之处,看看它是如何处理的。
答案 1 :(得分:3)
嗯,这是一个猜测,但是......
UserAccount.GetUserLoginInfo
究竟做了什么?如果我不得不猜测,它会尝试做一些特定于浏览器的事情。例如,它可以尝试从客户端读取cookie?如果是,那么我的下一个猜测是userInfo
或userInfo.UserName
为空,因此抛出NullReferenceException。
可能是IE接受cookie,而firefox则不接受。因此IE中没有错误,但仅限于Firefox。 再一次,这是猜测,我在VB.NET中并不强大,也不知道UserAccount类是什么。也许如果你使用错误消息,它可能意味着更多。
答案 2 :(得分:1)
如果有任何例外被抛出,你肯定会发现吗?如果没有,请在执行任何其他操作之前解决此问题。
至于为什么它可能是浏览器特定的: