2011-05-18 66 views
3

我有用戶控件的UI元素等下面訪問無序列表控制ID的代碼隱藏在

<u><ul> 
    <li id="liMiddle" class="off"> 
        <a href="#">One 
        </a> 
        <ul id="One" runat="server"> 

       </ul> 
       </li> 
       <li id="liMiddle" class="off"> 
       <a href="#">Two 
       </a> 
       <ul id="Two" runat="server"> 

       </ul> 
       </li> 
       <li id="liMiddle" class="off"> 
       <a href="#">Three 
       </a> 
       <ul id="Three" runat="server"> 

       </ul> 

的foreach(在亞位點的SPWeb supersubsite) { INT I = 0; HtmlGenericControl li = new HtmlGenericControl(「li」);

     CurrentTab.Controls.Add(li); 

         HtmlGenericControl anchor = new HtmlGenericControl("a"); 
         anchor.Attributes.Add("href", supersubsite.Url); 
         anchor.InnerText = supersubsite.Title; 
         li.Controls.Add(anchor); 
         } </u> 

這裏在每個循環中當前選項卡應該改爲相應的下一個ul id。如何訪問它?

我必須在ul上面動態生成'li'元素。所以我需要在代碼隱藏中一一訪問所有'ul'id。

有人可以告訴我解決方案嗎?

+0

你不應該是能夠在代碼中訪問的背後?我看到你有Runat =「Server」給ul's並設置了id,它應該是可訪問的。 – 2011-05-18 15:27:01

+0

使用中繼器。 – CRice 2011-05-19 06:39:30

回答

5

我會實現代碼隱藏的集合,你可以通過或在一個ASP.NET MVC風格page_load/click_events/.. 然後簡單循環加時listItems ..

// YourPage.aspx.cs: 
private readonly ICollection<string> items = new Collection<string> { "one", "two" }; 

// YourPage.aspx 
<ul> 
    <% foreach (var stringItem in this.items) { %> 
    <li><%= stringItem %></li> 
    <% } %> 
</ul> 
+1

感謝您的回覆。其實我正在從Sharepoint獲取所有網站,我必須在菜單中將這些網站標題顯示爲標籤。爲此,我使用了ul和li結構。每個網站可能包含子網站。因此,子網站將顯示在相應的ul下。在這個階段,我必須得到ul id,並且需要生成li。我知道如何生成這些li,但無法訪問foreach中的ul id。 – 2011-05-18 15:42:57

+0

我真的不明白,看起來你有層次。 Mh ..你可以這樣做:在你的aspx中使用<%= SomeCodeBehindStringRetunerMethod()%>,並在這個方法中生成ul/li/ul/blabla混合層,並直接將html直接返回給輸出。 – benwasd 2011-05-18 15:59:25

+1

我以另一種方式完成了這項工作。我只是把所有的ul都放在一個div下面,並給ID作爲'mainDiv'。HtmlGenericControl currenttab =(HtmlGenericControl)mainDiv.FindControl(currentSite); 這裏的當前網站與我的ul ID相同。我將從SharePoint站點獲取當前站點名稱。 無論如何感謝您的幫助 – 2011-05-19 10:34:55

1

你可以讓自己的ListBuilder類一個採用自定義UserListItem類/結構的Add方法。在這些類的內部,您可以使用TagBuilder使用您爲UserListItem構建的自定義類/結構創建LI和UL標記。您可以使用用戶定義的密鑰來存儲您正在該自定義ListBuilder類中構建的當前列表的靜態字典。

這樣,如果您需要從後面的代碼中動態獲取List或ListItems,那麼您可以使用ListBuilder並通過ID引用它們。下面

代碼有點粗糙,但這裏的總體思路:

using System.Collections.Generic; 
using System.Web.Mvc; 
using System; 

public class UserList 
{ 
    public List<UserListItem> UserListItems = new List<UserListItem>(); 
    public void Add(UserListItem item) 
    { 
     UserListItems.Add(item); 
    } 
} 

public class UserListItem 
{ 
    public string Name { get; set; } 
} 


public class ListBuilder 
{ 
    static Dictionary<string, UserList> userLists = new Dictionary<string, UserList>(); 
    public ListBuilder(string listId) 
    { 
     UserList newList = new UserList(); 
     newList.Add(new UserListItem() { Name = "Item1" }); 
     newList.Add(new UserListItem() { Name = "Item2" }); 
     userLists.Add(listId, newList); 
    } 
    public static UserList GetList(string listId) 
    { 
     return userLists[listId]; 
    } 
    public static string BuildList(string listId) 
    { 
     UserList list = userLists[listId]; 
     TagBuilder listTagBuilder = new TagBuilder("ul"); 

     list.UserListItems.ForEach(listItem => 
     { 
      TagBuilder listItemTagBuilder = new TagBuilder("li") { InnerHtml = listItem.Name }; 
      listTagBuilder.InnerHtml += listItemTagBuilder.ToString(TagRenderMode.Normal); 
     }); 
     return listTagBuilder.ToString(TagRenderMode.Normal); 
    } 
}