2012-04-11 16 views
1

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

最初は、このページは通常のASPXページであると思われていましたが、大きな成果を上げました(つまり、この例外は発生しませんでした)が、再利用可能性のためMasterPagesにラップすることにしましたこのASPXページは自動生成されているのでちょっと奇妙です)。

だから、我々は今、このトラブルになった:/

EDIT: 私は私を助けるためにあなたを助けるためにいくつかのコードを追加している:)

マスターページ:

<%@ 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> 

コンテンツページコードで例外を発生させる機能後ろに:

私が前に言ったように、私は、このページを参照されたアセンブリを通して別のプロジェクトからこのページにアクセスすると、この問題が発生します。 マスタページプロジェクトであっても、以前のプロジェクトのアセンブリを参照するWeb.configであれ、web.configで何かを設定する必要があるかどうかはわかりません。

+3

コードを表示してください。 –

答えて

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" %>行を削除した後、問題が解決した、今はページをキャストする必要があるが.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; 
    } 

よく、これはそれです。これがどのように私の問題を解決するのか推測できませんが、それはありません。私は誰かがこれにいくつかの光を当て、私の好奇心を満足させることができれば非常にうれしいでしょう。 これは非常に起こりそうもないですが、誰かがこのような問題を抱えている場合には、このツールが役立つことを願ってください。

0

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

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

これが役に立ちます。

+0

うわー、今私はなぜ前にそれを考えなかったのだろうかと思っています!ありがとう、すぐに試してみましょう! –

関連する問題