2017-04-07 59 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,你是最棒的,我真的很感激它。 –

相关问题