ASP C# 转发器按钮不将字符串传递给方法
ASP C# Repeater Button Not Passing String to Method
我有一个中继器,可以根据复选框列表中的选定项目创建按钮。复选框列表是项目代码的列表。
按钮正确显示,并以项目代码作为文本。这样可行。
单击时,按钮应使用按钮的项目代码调用一个方法来调用将数据填充到页面的方法,但事实并非如此。我相信按钮正在传递一个空值。
如何让转发器按钮点击传递正确的值?该方法适用于常规文本框,但我无法使其适用于中继器按钮。
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());
}
尝试设置 Repeater
的 OnItemCommand
属性:
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
上指定事件处理程序,但这可能归结为个人偏好。
我有一个中继器,可以根据复选框列表中的选定项目创建按钮。复选框列表是项目代码的列表。
按钮正确显示,并以项目代码作为文本。这样可行。
单击时,按钮应使用按钮的项目代码调用一个方法来调用将数据填充到页面的方法,但事实并非如此。我相信按钮正在传递一个空值。
如何让转发器按钮点击传递正确的值?该方法适用于常规文本框,但我无法使其适用于中继器按钮。
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());
}
尝试设置 Repeater
的 OnItemCommand
属性:
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
上指定事件处理程序,但这可能归结为个人偏好。