2011-06-28 9 views
0

私は奇妙なシナリオを持っていますが、これは私の前にどのように設計されたのかです。基本的に私は、ユーザーコントロールを持っている、とchild.masterpageUserControlから親のマスターページへ

は、それが含まれているASCXファイルでユーザーコントロールであり、次の

<div><%=_template%></div> 

child.masterpageはchild.masterpageで、parent.masterpageから継承ユーザーコントロールへの呼び出しがあり

<asp:Content><ucc:UserControl></ucc> 

parent.masterpageは、その中に他のフィールドを持っており、それが交流#機能付きの.csファイルを持っている

public void passVal(string s) 

これで、ユーザーコントロールから直接parent.masterpage関数に値を渡して、作成したparent.masterpageリテラルに値を入れることができます。

これを実現するには(やはりこれは既存の設計であり、私は物事を変えることはできません)機能を追加するだけです。

<%@ Master Language="C#" AutoEventWireup="true" MasterPageFile="../common/main.master" %> 
<%@ Register Src="UserControl.ascx" TagName="Ord" TagPrefix="uc" %> 
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" Runat="Server"> 
<div class="in"><uc:OrderReceipt ID="myord" runat="server" Visible="true"/> 
<div style="margin-bottom:30px;"> 
<a href="~/" id="HomeLink" runat="server" class="BackLink">Back to Home Page</a> 
</div> 
</asp:Content> 

答えて

0

Page.Masterプロパティを使用して、マスターページインスタンスを保持できます。回答の

protected someEvent(object sender, EventArgs e) 
{ 
    (Page.Master as ChildMaster).passVal("some string"); 
} 

より:

私はちょうどあなたのOPを見直し、何かを実現しました。私を困惑させていたコードはユーザーコントロールでした。私は背後にあるコードを見ていないが、私の推測では、ユーザーコントロールは、単に出力に使用されていることである

<div><%=_template%></div>

次それ が含まれているASCXファイルでユーザーコントロール内

動的HTML。あなたがユーザーコントロールのコードの背後にあるコード(.csファイル)を見ると、 _templateという変数が見つかります。実行時にhtmlでポンピングされる文字列変数です。

すでに...それは= P

を知って良いですさて、次の謎の背後にあなたの不足しているコードについての一つであることを知らなかった場合は、あなたの質問に答えるのではなく今

、子のマスターページのファイル。

私の理論は、誰でもそれを作った人は、それが自動的にファイルの裏にコードを生成しないようにするいくつかのエラーでそれをしたということです。あるいは、彼らは最初から作成してプロジェクトに追加しただけですが、コードを作成するのを怠ってしまいました。

私はマスターページを作った後、もう一つは子と呼ばれるものを作りました。私はそれをサブクラス化することができます。マークアップとコードの外観は次のようになります。あなたにマークアップを比較すると

<%@ Master Language="C#" MasterPageFile="~/Master.master" AutoEventWireup="true" CodeFile="Child.master.cs" Inherits="Child" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server"> 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="body" Runat="Server"> 
</asp:Content> 

public partial class Child : Master 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
} 

、ここでの重要な違いは私が明示的にCodeFile属性に言及していることです。

新しいcsファイルを作成し、命名規則に従います。子のマスターページにCodeFileInheritsの属性を追加します。これですべてが正しく接続され、メソッドなどを子のマスターページに追加できるようになります。

あなたがどこにいるのか教えてください。私たちはあなたの所在地を教えてください。 GL

+0

しかし、私はどのように私は2つのマスターを持って参照してください?私はUserControlにあります。私はUserControlの代わりに何を置くべきですか?(私はUserControlにあります) 私のメソッドを見ることができません。私はPage.master.masterをマスターページとして試しました – user710502

+0

@ user710502 ... Didn ' childMasterはparentMasterのサブクラスであると述べていますか? parentMasterにパブリックメソッドがある場合、継承のために利用可能であり、childMasterに公開されています。 –

+0

私はUserControl(child.master)にありますが、.csファイルはありませんが?私と一緒に裸で私はCで初心者です# – user710502

関連する問題