0

我有一个运行良好的非常简单的页面 - 直到我将代码放入使用母版页的新页面。然后我得到错误:

你调用的对象是空的

我的简单(独立)工作页面是:

    <%@ Page Language="VB" AutoEventWireup="false" CodeFile="emaillookuptest.aspx.vb" Inherits="emaillookuptest" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
        <asp:SqlDataSource ID="LoginDataSource" runat="server" 
            ConnectionString="<%$ ConnectionStrings:customer_support_devConnectionString %>" 
            ProviderName="<%$ ConnectionStrings:customer_support_devConnectionString.ProviderName %>" 
            SelectCommand="SELECT [id_staff], [semail] FROM [staff] WHERE ([semail] = ?)">
            <SelectParameters>
                <asp:FormParameter FormField="TextBoxEmailAddress" Name="semail" 
                    Type="String" />
            </SelectParameters>
        </asp:SqlDataSource>
        <p>
            Email Address:
            <asp:TextBox ID="TextBoxEmailAddress" runat="server" MaxLength="100" 
                Width="200px"></asp:TextBox>
        </p>
        <asp:Button ID="LoginButton" runat="server" Text="Log In" />
            <br />
        <asp:Label ID="LabelLoginResults" runat="server"></asp:Label>
        </div>
        </form>
    </body>
    </html>

以及背后的代码:

    Partial Class emaillookuptest
        Inherits System.Web.UI.Page

        Protected Sub LoginButton_Click(sender As Object, e As System.EventArgs) Handles LoginButton.Click

            Dim dv As New Data.DataView
            dv = LoginDataSource.Select(DataSourceSelectArguments.Empty)

            Dim c As Integer = dv.Count.ToString()
            If c <> 0 Then
                LabelLoginResults.Text = "Staff ID: " & dv.Table.Rows(0)("id_staff").ToString()
            Else
                LabelLoginResults.Text = "That email address was not found"
            End If

        End Sub
    End Class

如您所见,直截了当。

但是,一旦我尝试将此代码与现有母版页一起使用,就会在线出现错误“对象引用未设置为对象的实例”:

    Dim c As Integer = dv.Count.ToString()

我可以看到的唯一可能的原因是在母版页中我有以下内容:

    Dim dv As New Data.DataView
    dv = MyLanguageDataSource.Select(DataSourceSelectArguments.Empty)
    LitSiteFooterCopyright.Text = dv.Table.Rows(0)("SiteFooterCopyright").ToString()

如您所见,我引用了两个不同的数据源(新页面中的“LoginDataSource”和母版页中的“MyLanguageDataSource”)。

问题是因为我使用了两次“dv”或“Data.DataView”或“DataSourceSelectArguments”吗?一次进入母版页,又一次进入我的新 emaillookuptest.aspx 页面?

如果是这样,欢迎提出解决方法或正确方法的建议:)

更新:如果我从母版页中删除所有代码,我仍然会收到同样的错误。现在这让我更加困惑,因为代码本身就可以完美运行,但是如果我将它放入一个空的母版页排列中,我会在以下行遇到相同的错误: Dim c As Integer = dv.Count.ToString()

4

0 回答 0