マスターページを使用している新しいページにコードをドロップするまで、うまく機能する非常に単純なページがあります。次に、エラーが発生します。
オブジェクト参照がオブジェクト インスタンスに設定されていません
私の単純な(スタンドアロンの)作業ページは次のとおりです。
<%@ 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()