none
關於巢狀 master pages架構下,取得master中物件的問題 RRS feed

  • 問題

  • 請教先進

    我目前使用VS2008(use c#)作巢狀masterpage的練習,之前只有單一主版頁面情況下,contant用master.FindControl方法可以正常取得其master頁面所要求的控制項狀態,但套入巢狀架構後,發現第二層master頁面底下的contant同樣用 master.FindControl方法卻有問題,找不到該層master的控制項,求問這種狀況如何處理?另外contant可以取得更上層master的控制項嗎?

    2008年5月8日 上午 07:53

解答

  • 目前在物件模型上無法支援,但可以用像這樣的方法:

     

    Code Snippet

    Label myLabel = Page.Master.Master.FindControl("ContentPlaceHolder1").FindControl("myLabel") as Label;

    myLabel.Text = "My Text";

     

     

    其中:

     

    走了幾層 Master Page,就要用幾個 .Master,二層是二個,三層是三個。

    然後由最頂層的 Master Page 開始 FindControl("該層的 Content Place Holder 的 ID"),再繼續往下一層的 Master Page 做  FindControl("該層的 Content Place Holder 的 ID"),直到你要抓的控制項所在的 Master Page 的前一層,最後再下 FindControl("要找的控制項的 ID") 就可以抓的到了。

    2008年5月9日 上午 10:49
    版主

所有回覆

  • 1. 本文移到 ASP.NET 板。

     

    2. 我不太了解你的說明,你是指 Content Page 找不到第二層 Master Page 的控制項,還是第一層?

     

    在第二層的 Content Page 可以利用 Page.Master.Master.FindControl() 來搜尋第一層的控制項。

     

     

    2008年5月8日 上午 08:06
    版主
  • 感謝回覆

    我的問題是第二層Content Page抓不到該層Master Page的控制項,會不會是因為第二層Master Page的控制項包在 Content Page裡面的關係?

    2008年5月9日 上午 07:25
  • 不知道你是怎麼做的,所以無從判斷。

     

    2008年5月9日 上午 07:26
    版主
  • 回覆小朱大

     

    我的第二層Master Page 內容

    <%@ Master Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="CustTab.master.cs" Inherits="CustTab" %>
       
        <asp:Content ID="SubContent" ContentPlaceHolderID="MainContent" runat="server"> 
            <asp:Menu ID="CustItems" runat="server"   ..............

     

    如果這層的 Content Page 要取得  ="CustItems" 這個控制項

    用 Page.Master.FindControl("CustItems") 就抓不到,但我試過您提供 Master.Master.FindControl() 方法去抓第一層的沒有問題。 

     

    2008年5月9日 上午 07:50
  • 在 <asp:Content> 中放置的控制項,只有在沒有 Content Page 套用的情況下才會有用。

    如果你要讓第二層的 Content Page 可以讀到,請把它移到 <asp:Content> 之外。

     

    2008年5月9日 上午 08:00
    版主
  • 請問.master file要變成第二層master page 不是要整個套用content page?那裡面的控制項如何移出 <asp:Content> ? 煩請再指點一二

    2008年5月9日 上午 10:26
  • 目前在物件模型上無法支援,但可以用像這樣的方法:

     

    Code Snippet

    Label myLabel = Page.Master.Master.FindControl("ContentPlaceHolder1").FindControl("myLabel") as Label;

    myLabel.Text = "My Text";

     

     

    其中:

     

    走了幾層 Master Page,就要用幾個 .Master,二層是二個,三層是三個。

    然後由最頂層的 Master Page 開始 FindControl("該層的 Content Place Holder 的 ID"),再繼續往下一層的 Master Page 做  FindControl("該層的 Content Place Holder 的 ID"),直到你要抓的控制項所在的 Master Page 的前一層,最後再下 FindControl("要找的控制項的 ID") 就可以抓的到了。

    2008年5月9日 上午 10:49
    版主
  • 終於可以了,謝謝您

    2008年5月9日 下午 05:03