1

我有一个显示用户字符的页面。使用中继器,我为每个字符创建一个 div,其中包含从我的数据库中获取的字符的不同信息。当我单击其中一个 div 时,我希望能够调用使用我的 characterId 作为参数的方法服务器端。

我尝试在 div 标签上使用 onclick。使用锚。使用 display:none 按钮并在单击 div 时调用它,我尝试了一些对我来说没有多大意义的奇怪事情。我没有想法了。如果需要,我可以使用 javascript。

这是我页面的代码

<asp:Repeater ID="VK_Character_CharacterNotSelected_rptCharacter" runat="server">
            <ItemTemplate>
                <div class="divCharacterNotSelected_divCharacterPanel" 
                     onclick='<%# "SelectCharacter_Click("+Eval("CharacterId")+")" %>'
                     runat="server" 
                     id="VK_Character_CharacterNotSelected_divCharacter">

和代码隐藏

protected void SelectCharacter_Click(int characterId)
{
    Stuff....
}

感谢您提供的任何帮助。

编辑:按照 King A.Majid 的回答后,我可以用我的参数调用服务器端方法,但是当我点击我的 div 时我需要调用按钮 onclick。

编辑 2:我考虑过使用 ItemDataBound 来设置它,但不知道如何设置 div onclick

编辑3:改用linkbutton,但它与我在链接上的CSS混淆了。这里要显示的图像:

在此处输入图像描述

编辑 4:问题已解决。刚刚在我的页面中添加了额外的 CSS 来修复链接。

4

2 回答 2

1

兄弟,

要实现您的目标,请使用以下,在中继器内将按钮定义为以下:

<asp:Button Id="SelectCharacter" CommandName="SelectCharachter" runat="server"  CommandArgument='<%# Eval("CharachterId") %>' />

在后面的代码中:

  protected void VK_Character_CharacterNotSelected_rptCharacter_ItemCommand(object source, RepeaterCommandEventArgs e)
        {
         switch (e.CommandName)
                {
case "SelectCharachter":
string _SelectedCharachter=e.CommandArgument.ToString();
break;

}
}

因此,您不需要处理 OnClick,只要它在中继器中的 Repeater_Command 事件会处理它:

问候

于 2013-05-16T20:01:01.150 回答
1

您可以使用LinkButton. 它在浏览器上呈现为链接,因此您可以在该链接中添加任何您想要的内容。

<asp:Repeater ID="VK_Character_CharacterNotSelected_rptCharacter" runat="server">
    <ItemTemplate>
        <asp:LinkButton runat="server" ID="LinkButton1" 
            OnCommand="LinkButton1_Command" 
            CommandArgument='<%# Eval("CharacterId") %>'>
            <div class="divCharacterNotSelected_divCharacterPanel">...</div>
        </asp:LinkButton>
    </ItemTemplate>
</asp:Repeater>

protected void LinkButton1_Command(object sender, CommandEventArgs e)
{
    var characterId = e.CommandArgument;
}
于 2013-05-16T20:41:04.050 回答