1

参照されたアセンブリから ASPX ページを使用しようとすると、この問題が発生します。このページは、コンテンツ ページとそのマスター ページで構成されます。この例外は、別の Web プロジェクトからコンテンツ ページの Web コントロールにアクセスした場合にのみ発生しますが、そのページが属する同じプロジェクトからそのページにアクセスした場合は発生しません。

最初は、このページは通常の ASPX ページであると想定されていましたが、その後うまく機能しました (つまり、この例外は発生しませんでした)。この 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

問題が解決しました。

コンテンツページの最初の行がそれを台無しにしたので、これが今のように見えます:

    <%@ 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" %>行を削除した後、問題は解決しましたが、ContentPageからフィールド、プロパティ、コントロールなどにアクセスする場合は、Page.Masterプロパティをキャストする必要があります。これは、前述の行を削除することによって発生します。どの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 に答える
0

通常、このようなエラーは、アセンブリにアクセスしている他のソリューションに存在する構成情報が欠落している場合に発生します。

他のアセンブリにアクセスしている現在のプロジェクトで、これらの設定 (app.config や web.config など) をコピーする必要があります。

お役に立てれば。

于 2012-04-11T07:20:53.057 に答える