设置OnClick for ASP:ASP内部的按钮:Repeater

时间:2015-11-06 15:18:44

标签: asp.net vb.net

我有以下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事件的内容?

2 个答案:

答案 0 :(得分:3)

一些事情;没有按钮名称属性,如果它直接向客户端发送文本,这可能会导致问题。要使ItemCommand起作用,请为按钮指定一个命令名称,并(可选)指定一个arg:

<asp:Button .. CommandName="Delete" CommandArgument="OPTIONAL" />

那应该触发ItemCommand事件。对于name参数,您可以通过CommandArgument传递<%# DirectCast(Container.DataItem, FileFolder).Link%>。您也可以使用JAAS/krb comparison between with/without MIT tool。我相信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;"/>