2011-08-15 11 views
4

私はその中にユーザーコントロールを持っていますマスターページの先頭に何かを「注入」したいと思います。私は(mmarkupスニペットマスターページとユーザーコントロール)は、次のアプローチを使用しようとしました...マスターコントロールのコンテンツコントロールをユーザーコントロールから参照するにはどうすればよいですか?

マスターページ:

<asp:ContentPlaceHolder ID="head" runat="server"> 
</asp:ContentPlaceHolder> 

ユーザーコントロール:

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server"> 
    <link type="text/css" rel="stylesheet" href="/Shared/Css/Navigation.css" /> 
</asp:Content> 

しかし、それができますエラー:

Content controls have to be top-level controls in a content page or a nested master page that references a master page.

したがって、コントロールから実行時にマスターページにコンテンツを挿入するにはどうすればよいですか?

答えて

3

マスターページのパブリックメソッドを使用してマスターページコンテンツにアクセスできます。あなたの質問から例を挙げると、あなたのコードの次の変更を加えて、マスターコントロールのページにリンクのhrefを設定することができます:

リンクをマスターページの "通常のコンテンツ"あなたにはコードの背後からアクセスできるようにIDを与えてください。

<link id="link" type="text/css" rel="stylesheet" /> 

マスターページにプロパティを追加して、hrefを設定します。あなたがページからこれをアクセスしたい場合は

public string LinksHref 
{ 
    get { return link.Href; } 
    set { link.Href = value; } 
} 

あなたはMasterTypeディレクティブを追加することができます。

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

コントロールコード内のプロパティを変更します。

Master.LinksHref = "/Shared/Css/Navigation.css"; 

ユーザーコントロールからこれをアクセスしたい場合は、あなたがMasterTypeディレクティブを使用して自分で鋳造を行う必要はありません。

((MasterPageClassName)Page.master).LinksHref= "/Shared/Css/Navigation.css"; 
関連する問題