1

尝试使用引用程序集中的 ASPX 页面时遇到此问题。此页面由内容页面及其母版页组成。仅当从另一个 Web 项目访问任何内容页面 web 控件时才会引发异常,但从它所属的同一项目访问该页面时不会发生这种情况。

起初,这些页面应该是常规的 ASPX 页面,然后它们运行良好(即没有发生此异常),但我们的上级决定将它们包装到 MasterPages 中,以实现一些可重用性或其他原因(这有点奇怪因为这个 ASPX 页面是自动生成的)。

所以,我们现在遇到了这个麻烦:/

编辑:我正在添加一些代码来帮助你帮助我:)

母版页:

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="MasterPage.master.cs"
Inherits="WebApplicationTemplate.MasterPage" %>
<!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 id="Head1" runat="server">
    <asp:ContentPlaceHolder ID="headPlaceHolder" runat="server">
    </asp:ContentPlaceHolder>
</head>
<body>
    <form id="form" runat="server">
        <asp:ContentPlaceHolder ID="formPlaceHolder" runat="server">
        </asp:ContentPlaceHolder>
    </form>
</body>
</html>

内容页:

<%@ MasterType VirtualPath="~/MasterPage.Master" %>

<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.Master" AutoEventWireup="true"
    CodeBehind="TestPage.aspx.cs" Inherits="WebApplicationTemplate.TestPage" %>

<asp:Content ID="headContent" ContentPlaceHolderID="headPlaceHolder" runat="server">
</asp:Content>
<asp:Content ID="formContent" ContentPlaceHolderID="formPlaceHolder" runat="server">
    <asp:TextBox ID="id1" runat="server" Text="Text" MaxLength="40" Style="top: 100;
        left: 100; width: 100; height: 100; position: absolute;" />
</asp:Content>

在后面的内容页面代码中引发异常的函数:

public void Foo()
{
id1.Text = "something"; //Object reference not set to an instance of an object.
}

正如我之前所说,当我通过引用程序集从另一个项目访问此页面时,我才遇到此问题。我不知道是否必须在任何 web.config 中配置某些内容,无论是在母版页项目中还是在引用前一个项目的程序集的那个中。

4

2 回答 2

0

当您缺少您正在访问其程序集的其他解决方案中存在的某些配置信息时,通常会发生此类错误。

您需要在当前项目中复制这些设置(例如 app.config 或 web.config),从该项目中您正在访问其他程序集。

希望这可以帮助。

于 2012-04-11T07:20:53.057 回答
0

问题解决了。

内容页面的第一行搞砸了,所以现在看起来是这样的:

    <%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.Master" AutoEventWireup="true"
    CodeBehind="TestPage.aspx.cs" Inherits="WebApplicationTemplate.TestPage" %>
<asp:Content ID="headContent" ContentPlaceHolderID="headPlaceHolder" runat="server">
</asp:Content>
<asp:Content ID="formContent" ContentPlaceHolderID="formPlaceHolder" runat="server">
    <asp:TextBox ID="id1" runat="server" Text="Text" MaxLength="40" Style="top: 100;
        left: 100; width: 100; height: 100; position: absolute;" />
</asp:Content>

因此,删除该<%@ MasterType VirtualPath="~/MasterPage.Master" %>行后,问题就解决了,尽管现在我们必须强制转换 Page.Master 属性,如果要从 ContentPage 访问其字段、属性、控件等...,原因是删除了上述行,我们不再知道我们指的是哪个 MasterPage 类。

像这样的东西:

    MasterPage MP;

    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        //Setting the master page
        MP = ((WebApplicationTemplate.MasterPage)Master);
    }

    protected void Foo()
    {
        //Accessing a MasterPage control
        MP.Bar.Visible = false;
    }

好吧,就是这样。无法猜测这如何解决我的问题,但确实如此。如果有人能对此有所了解并满足我的好奇心,我将非常高兴。这不太可能,但是,如果有人碰巧遇到这个问题,希望任何人都觉得这很有用。

于 2012-04-11T15:18:23.743 回答