ItemCommand не работает с повторителем и несколькими событиями - PullRequest
0 голосов
/ 10 октября 2018

Я получаю ретранслятор с 3 переключателями (сгруппированы в 3 строки по свойству GroupName) и срабатываю (для каждого переключателя).Моя проблема возникает, когда я добавляю HiddenField в столбец повторителя и хочу достичь этого HiddenField с помощью события ItemCommand.

Событие ItemCommand не вызывается ...

(событие щелчка LinkButtonработает также)

(Если установлен переключатель 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;
        }
    }

Я пытался:

  • Окружение переключателей LinkButton (и использовать событие Click and Command ... Ни один не поднимает ...). Это не сработало.
  • Определите ItemCommand как обычно (трюк CauseValidation = "false"). Это не сработало. (1)
  • Установка связи между кнопкой ссылки и событием его функции программно (в качестве переключателя). Не сработало.

Код товара (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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...