我有以下asp:Repeater:
<asp:Repeater runat="server" ID="rptResults">
<ItemTemplate>
<div class="FileFile Large pdf SearchResult">
<a href='<%# DirectCast(Container.DataItem, FileFolder).Link %>' style="text-decoration:none">
<%# DirectCast(Container.DataItem, FileFolder).BackgroundHTML%>
<p style="float:left;line-height:32px;margin:0px"><%# DirectCast(Container.DataItem, FileFolder).Filename%></p>
</a>
<p style="float:left;line-height:32px;margin:0px; margin-left:20px;">Path: <%# DirectCast(Container.DataItem, FileFolder).Link%></p>
<asp:Button runat="server" ID="btnDeleteFile" Name="<%# DirectCast(Container.DataItem, FileFolder).Link%>" Text="Delete" Style="float:right;margin-top:8px;cursor:pointer;"/>
</div>
</ItemTemplate>
</asp:Repeater>
我的问题是尝试设置一个OnCLick监听器。
首先我尝试了:
<asp:Button runat="server" OnClick="btnDeleteFile_Click" ID="btnDeleteFile" Name="<%# DirectCast(Container.DataItem, FileFolder).Link%>" Text="Delete" Style="float:right;margin-top:8px;cursor:pointer;"/>
和
Protected Sub btnDeleteFile_Click(sender As Object, e As System.EventArgs)
Response.Write("KDKDK")
Response.End()
End Sub
但这导致Invalid postback or callback argument.
我怀疑是因为我无法在转发器中设置OnCLick
侦听器?
然后我尝试了:
<asp:Button runat="server" ID="btnDeleteFile" Name="<%# DirectCast(Container.DataItem, FileFolder).Link%>" UseSubmitBehavior="false" Text="Delete" Style="float:right;margin-top:8px;cursor:pointer;"/>
和
Protected Sub rpt_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.RepeaterCommandEventArgs)
If e.CommandName = "Save" Then
'Save
End If
End Sub
哪个没有导致回发错误,但没有触发事件。我怀疑这是因为没有将监听器分配给按钮?
如果我添加句柄,例如:
Protected Sub rpt_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.RepeaterCommandEventArgs) Handles rpt.ItemCommand
哪个错误:
Handles clause requires a WithEvents variable defined in the containing type or one of its base types.
但是我看不到如何分配一个WithEvents变量,我不确定它是否会在转发器中运行。
我不会因为我尝试过的每一件事而一直无聊,但我已尽力搜索,但找不到任何能告诉我如何设置此OnCLick事件的内容?
答案 0 :(得分:3)
一些事情;没有按钮名称属性,如果它直接向客户端发送文本,这可能会导致问题。要使ItemCommand起作用,请为按钮指定一个命令名称,并(可选)指定一个arg:
<asp:Button .. CommandName="Delete" CommandArgument="OPTIONAL" />
那应该触发ItemCommand事件。对于name参数,您可以通过CommandArgument传递<%# DirectCast(Container.DataItem, FileFolder).Link%>
。您也可以使用。我相信Eval也支持点符号。
答案 1 :(得分:0)
简单的错误:
Protected Sub rpt_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.RepeaterCommandEventArgs) Handles rptResults.ItemCommand
和
<asp:Button runat="server" ID="btnDeleteFile" commandname="<%# DirectCast(Container.DataItem, FileFolder).Link%>" UseSubmitBehavior="false" Text="Delete" Style="float:right;margin-top:8px;cursor:pointer;"/>