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()

ご覧のとおり、2 つの異なるデータ ソース (新しいページの「LoginDataSource」とマスター ページの「MyLanguageDataSource」) を参照しています。

「dv」または「Data.DataView」または「DataSourceSelectArguments」のいずれかを 2 回使用していることが問題ですか? マスター ページ内で 1 回、新しい emaillookuptest.aspx ページでもう一度?

もしそうなら、回避策またはこれを行う正しい方法の提案を歓迎します:)

更新: マスター ページからすべてのコード ビハインドを削除しても、同じエラーが発生します。コードはそれ自体で完全に機能するため、これはさらに混乱しますが、空のマスターページ配置にドロップすると、次の行で同じエラーが発生します: Dim c As Integer = dv.Count.ToString()

4

0 に答える 0