ItemCommand不适用于转发器和少量事件

时间:2018-10-10 08:09:11

标签: c# asp.net repeater itemcommand

我得到一个带有3个单选按钮的中继器(按GroupName属性分为3行)并被触发(每个单选按钮)。当我将HiddenField添加到转发器列中并且我想通过ItemCommand事件到达此HiddenField时,就会出现我的问题。

ItemCommand事件没有引发...

(LinkBut​​ton单击事件也可以正常工作)

(如果设置了单选按钮的CheckedChanged事件,它们可以正常工作,但由于我需要到达HiddenField而没有帮助)

这是我的代码:

CSHTML

<asp:Repeater runat="server" ID="repeaterImages" OnItemDataBound="repeaterImages_ItemDataBound">
  <ItemTemplate>
    <asp:LinkButton ID="lnkEliminarImagen" runat="server" OnClick="lnkEliminarImagen_Click" CausesValidation="false"><i class="fa fa-times" ></i></asp:LinkButton>
    <span>
          <asp:RadioButton runat="server" ID="rbLogoSeleccionado" Text='Logo 0' GroupName="nombreLogo" /><br />
          <asp:RadioButton runat="server" ID="rbLogoSeleccionadoApp" Text='Logo 1' GroupName="nombreLogoApp" /><br />
          <asp:RadioButton runat="server" ID="rbLogoSeleccionadoAppBlanco" Text='Logo 2' GroupName="nombreLogoAppBlanco" />
          <asp:HiddenField runat="server" ID="hdLogoId" Value='<%#Eval("id").ToString()%>' />
       </span>
     </ItemTemplate>
    </asp:Repeater>

JS

  

用于模拟GroupName行为。避免拥有多个   每行选中单选按钮

<script>
    function SetUniqueRadioButton(text, current) {
        for (i = 0; i < document.forms[0].elements.length; i++) {

            elm = document.forms[0].elements[i]

            if ((elm.type == 'radio') && (elm.value == text)) {
                elm.checked = false;
            }
        }
        current.checked = true;
    }
</script>

CS

    protected void repeaterImages_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        try
        {
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
                RadioButton rbLogoSeleccionado = (RadioButton)e.Item.FindControl("rbLogoSeleccionado");
                RadioButton rbLogoSeleccionadoApp = (RadioButton)e.Item.FindControl("rbLogoSeleccionadoApp");
                RadioButton rbLogoSeleccionadoAppBlanco = (RadioButton)e.Item.FindControl("rbLogoSeleccionadoAppBlanco");

                string script = "SetUniqueRadioButton('rbLogoSeleccionado',this)";
                string scriptApp = "SetUniqueRadioButton('rbLogoSeleccionadoApp',this)";
                string scriptAppBlanco = "SetUniqueRadioButton('rbLogoSeleccionadoAppBlanco',this)";

                rbLogoSeleccionado.Attributes.Add("onclick", script);
                rbLogoSeleccionadoApp.Attributes.Add("onclick", scriptApp);
                rbLogoSeleccionadoAppBlanco.Attributes.Add("onclick", scriptAppBlanco);
            }
        }

        catch (Exception ex)
        {
            PIPEvo.Log.Log.RegistrarError(ex);
            throw;
        }
    }

我尝试过:

  • 通过LinkBut​​ton环绕单选按钮(并使用Click and Command事件...没有引发...)。 没有用。
  • 像往常一样定义ItemCommand(也请窍门CauseValidation =“ false”)。 它没有用。(1)
  • 以编程方式设置linkbutton及其功能事件之间的链接(作为单选按钮)。 它没有用。

ITEMCOMMAND CODE(1)

CSHTML

    <asp:Repeater runat="server" ID="repeaterImages" OnItemDataBound="repeaterImages_ItemDataBound" OnItemCommand="repeaterImages_ItemCommand">
      <ItemTemplate>
        <asp:LinkButton ID="lnkEliminarImagen" runat="server" OnClick="lnkEliminarImagen_Click" CausesValidation="false"><i class="fa fa-times" ></i></asp:LinkButton>
        <span>
              <asp:LinkButton runat="server" ID="lnkbtnbtn" OnCommand="lnkbtnbtn_Command" CommandArgument='<%#Eval("LOGO_ID").ToString()%>' CausesValidation="false" CommandName="prueba"></asp:LinkButton>
              <asp:RadioButton runat="server" ID="rbLogoSeleccionado" Text='Logo 0' GroupName="nombreLogo" /><br />
              <asp:RadioButton runat="server" ID="rbLogoSeleccionadoApp" Text='Logo 1' GroupName="nombreLogoApp" /><br />
              <asp:RadioButton runat="server" ID="rbLogoSeleccionadoAppBlanco" Text='Logo 2' GroupName="nombreLogoAppBlanco" />
              <asp:HiddenField runat="server" ID="hdLogoId" Value='<%#Eval("id").ToString()%>' />
           </span>
         </ItemTemplate>
        </asp:Repeater>

CS

protected void repeaterImages_ItemCommand(object source, RepeaterCommandEventArgs e)
    {
        HiddenField id = (HiddenField)e.Item.FindControl("hdLogoId");
        string idlogo = id.Value;
        switch (e.CommandName)
        {
            case ("prueba"):
                string idid = e.CommandArgument.ToString();
                break;
        }
    }

我正在寻找的想法

分别将每个单选按钮与其图像关联(通过ID)。 最后,当我提交时,可以知道我的单选按钮(我将要执行的操作)和特定于图像(logo_id)的信息

0 个答案:

没有答案