1

ASP.NETにネストされたページを持つマスターページがあります。非常に簡単に言えば、マスターページのグリッドビューにいくつかのハイパーリンクをデータバインドしたいと思います。ただし、データソースを設定しようとすると、null参照例外がスローされます。

  1. 別のページでコードをテストしましたが、期待どおりに機能します。
  2. デバッグすると、Page_Load Subが2回ヒットするのがわかりますが、これが原因かどうかはわかりません
  3. ネストされたページが1つ読み込まれていますが、これは現時点では空白のページです

例外

Object reference not set to an instance of an object.

ここに画像の説明を入力してください

マスターページコードの背後

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    If Not Page.IsPostBack Then
        Using model = New AccessDataModelDataContext
            Dim result = From x In model.SiteLinks
                         Where x.IsActive
                         Select x

            SiteLinks.DataSource = result
            SiteLinks.DataBind()
        End Using
    End If

End Sub

マスターページASPXコード

<%@ Master Language="VB" AutoEventWireup="false" CodeBehind="Site.master.vb" Inherits="Access.Manager.Site" %>

<!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">
    <link href="~/Styles/Styles.css" rel="stylesheet" type="text/css" />
    <title></title>

    <asp:ContentPlaceHolder ID="head" runat="server">
    </asp:ContentPlaceHolder>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        Site.Master
        <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
        <div class="navigation">
            Site Links
            <asp:GridView ID="SiteLinks" runat="server">
            </asp:GridView>
            </div>

        <div class="content">Site Content</div>


        </asp:ContentPlaceHolder>
    </div>
    </form>
</body>
</html>
4

2 に答える 2

1

私が目にする明白な問題の1つは、あなたの問題である可能性がありますが、GridViewがコンテンツプレースホルダー内に存在することです。通常、これらのプレースホルダーは、マスターページ自体ではなく、ページを実装するためのものです。

プレースホルダーの内容をそこから移動します。

<body>
    <form id="form1" runat="server">
    <div>
        Site.Master
        <div class="navigation">
            Site Links
            <asp:GridView ID="SiteLinks" runat="server">
            </asp:GridView>
        </div>
        <div class="content">Site Content</div>
        <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
        </asp:ContentPlaceHolder>
    </div>
    </form>
</body>
于 2012-06-14T21:54:14.187 に答える
1

このようにコンテンツページからマスターページGridviewにデータをバインドできます。

GridView grid_data = this.Master.FindControl("show_zone_data") as GridView;

grid_data.DataSource = dt;
grid_data.DataBind();
于 2020-01-21T06:32:22.013 に答える