2017-04-07 57 views
1

我有一箇中繼器,用於從複選框列表中的選定項目創建按鈕。複選框列表是項目代碼的列表。ASP C#中繼器按鈕不傳遞字符串到方法

這些按鈕顯示正確,並將項目代碼作爲文本。這樣可行。

點擊後,該按鈕應該使用按鈕的項目代碼調用一個方法來調用一個將數據填充到頁面的方法,但這不會發生。我相信按鈕傳遞一個空值。

如何讓中繼器按鈕單擊以傳遞正確的值?該方法與常規文本框一起工作,但我無法使它與中繼器按鈕一起工作。

ASPX

` <div style="width: 98%; overflow-x: scroll;"> 
    <asp:Repeater ID="rptItemButtons" 
       runat="server"> 

      <ItemTemplate> 
       <asp:Button ID="btnItemButton" 
        runat="server" 
        Text='<%# Container.DataItem.ToString() %>' 

        CommandArgument='<%# Container.DataItem.ToString() %>' 
        CommandName="repeater_ItemCommand" 
        /> 

      </ItemTemplate> 
      </asp:Repeater> 
    </div>` 

C#

public void repeater_ItemCommand(object sender, CommandEventArgs e) 
    { 
    SaveUserInputsAction();               
    SaveDataAction(); 
    lblTestMessage.Text = e.CommandArgument.ToString(); 
    GetItemDetails(e.CommandArgument.ToString());   GetCostFactors(e.CommandArgument.ToString()); 
    } 
+0

我認爲你需要使用'Container.ItemIndex'作爲'CommandArgument'而不是'Container.DataItem' – VDWWD

回答

1

嘗試將RepeaterOnItemCommand屬性:

ASPX:

<asp:Repeater ID="rptItemButtons" OnItemCommand="Repeater_ItemCommand" runat="server"> 
    <ItemTemplate> 
     <asp:Button ID="btnItemButton" runat="server" 
      Text='<%# Container.DataItem.ToString() %>' 
      CommandArgument='<%# Container.DataItem.ToString() %>' 
     /> 
    </ItemTemplate> 
</asp:Repeater> 

代碼隱藏:

public void Repeater_ItemCommand(object sender, RepeaterCommandEventArgs e) 
{ 
    SaveUserInputsAction();               
    SaveDataAction(); 
    lblTestMessage.Text = e.CommandArgument.ToString(); 
    GetItemDetails(e.CommandArgument.ToString()); 
    GetCostFactors(e.CommandArgument.ToString()); 
} 

編輯再次審查您的代碼後,我注意到,您在您的按鈕指定CommandName="repeater_ItemCommand"。如果您將其更改爲OnCommand="repeater_ItemCommand",它可能會有效。我有點喜歡指定Repeater上的事件處理程序,但它可能歸結爲個人偏好。

+1

解決了它!謝謝@dana,你是最棒的,我真的很感激它。 –

相關問題