【问题标题】:MasterPage Data Bind to GridViewMasterPage 数据绑定到 GridView
【发布时间】:2012-06-17 23:45:36
【问题描述】:

我在 ASP.NET 中有一个包含嵌套页面的母版页。相当简单,我想将一些超链接数据绑定到母版页的网格视图。但是,当我尝试设置 DataSource 时,这会引发空引用异常。

  1. 我在单独的页面上测试了代码,它按预期工作。
  2. 调试的时候看到Page_Load Sub两次命中,不知道是不是这个原因
  3. 我正在加载一个嵌套页面,目前这是一个空白页面

例外

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>

【问题讨论】:

  • 该代码隐藏在您的母版页还是使用您的母版页的页面?
  • 这是母版页的代码。我会更新以澄清。
  • 添加断点以验证result 不为空。我通常这样做的方式是提供最少的空结果(非空)。
  • 谢谢 Jeremy,刚刚使用断点和 If result IsNot Nothing Then 检查了它,但它仍然是一个问题......
  • 检查 IsNot Nothing 是否有效?还是您仍然遇到异常?

标签: asp.net vb.net gridview


【解决方案1】:

我们可以像这样从内容页面将数据绑定到母版页Gridview,

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

grid_data.DataSource = dt;
grid_data.DataBind();

【讨论】:

    【解决方案2】:

    我看到的一个明显问题(可能是您的问题)是您的 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>
    

    【讨论】:

    • 是的,就是这样!我怎么能错过它,当然,如果它在占位符中,您将无法访问控件。谢谢!
    • 你打赌。因此,从本质上讲,我相信发生的事情是您的页面(即使用您的母版页)覆盖了该占位符的内容,因此它找不到 gridview(因为您的页面没有为占位符定义 gridview )。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    • 2018-11-24
    • 1970-01-01
    相关资源
    最近更新 更多