2014-09-22 53 views
0

我有一個數據列表內的超鏈接和一個隱藏字段如下所示的DataList SelectedIndexChange事件不觸發

<asp:DataList ID="clientsList" runat="server" OnSelectedIndexChanged="clientsList_SelectedIndexChanged1" > 
    <ItemTemplate> 
     <asp:HyperLink ID="hlName" runat="server" Text='<%# Bind("Name") %>' NavigateUrl="#" ></asp:HyperLink> 
     <asp:HiddenField ID="HiddenFieldID" runat="server" Value='<%# Eval("ID") %>' />      
    </ItemTemplate> 
</asp:DataList> 

當用戶點擊任何超鏈接,我需要該值存儲在應用程序的變量。但SelectedIndexChange事件永遠不會觸發。

這是我的代碼:

protected void clientsList_SelectedIndexChanged1(object sender, EventArgs e) 
{    
     int idx = clientsList.SelectedIndex; 
     HiddenField hiddenCID = clientsList.Items[idx].FindControl("HiddenFieldID") as HiddenField; 

     if (hiddenCID != null) 
     { 
      Logger.UpdateLog("Selected ID: " + hiddenCID.Value.ToString()); 
     } 
    } 

我綁定數據庫數據到DataList在Page_load事件如下,這是工作的罰款。

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     BindDataList(); 
    }   
} 

任何想法爲什麼這個事件永遠不會被解僱?

而且是我的代碼是正確的,只要能夠關注訪問hiddenfield價值?

回答

1

您是否設置了超鏈接字段的commandname屬性?

<asp:LinkButton ID="LinkButton1" runat="server" CommandName="Select">Select</asp:LinkButton> 

現在的SelectedIndexChanged方法:

protected void DataList1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    int idx = DataList1.SelectedIndex; 
    Label lbl = (Label)DataList1.Items[idx].FindControl("Label1"); 
    int id =Convert.ToInt32(DataList1.SelectedValue); 
} 

是否行得通?

+0

我認爲你必須使用linkbutton並在數據綁定中綁定Url。 – 2014-09-22 18:25:15

+0

超鏈接沒有「commandName」屬性\屬性。那麼,如果沒有「CommandName」屬性,我們就無法訪問數據列表中控件的數據? – user117048 2014-09-22 18:26:42