найти элемент управления в TemplateField GridView с помощью jquery или javascript - PullRequest
0 голосов
/ 16 апреля 2019

При событии нажатия кнопки на стороне клиента я хочу получить идентификатор элемента управления, который помещается в шаблон элемента в виде сетки. Я попробовал этот код, но он не работает. Спасибо

function buttonClicked(sender, args) {
    var gv = $find('<%= GridView1.ClientID %>');

    var textbox = $GridView1.findControl(gv.get_element().parentNode, "Textbox");
}

Вот Гридвью

<form id="form1" runat="server">
   <asp:ScriptManager ID="ScriptManager1"runat="server">
   </asp:ScriptManager>
   <div>
     <asp:UpdatePanel ID="upTest" runat="server">
      <ContentTemplate>
        <asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False" DataSourceID="KurzDS" DataKeyNames="Id" OnRowCommand="GridView1_RowCommand">
          <Columns>
            <asp:TemplateField>
              <ItemTemplate>
                <asp:TextBox ID="Textbox" runat="server" Text="Textbox"></asp:TextBox>
              </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField>
              <ItemTemplate>
                <asp:TextBox ID="Textbox1" runat="server" Text="Textbox1"></asp:TextBox>
              </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField>
              <ItemTemplate>
                <asp:Button ID="btn" Text='btn' CommandArgument='<%# Eval("Id")%>'  CommandName="btn" runat="server" CausesValidation="false" />
              </ItemTemplate>
            </asp:TemplateField>
          </Columns>
        </asp:GridView>
      </ContentTemplate>
    </asp:UpdatePanel>
   </div>
</form>

1 Ответ

0 голосов
/ 18 апреля 2019

Спасибо, что включили пример GridView. Теперь, когда я вижу, что вы пытаетесь сделать, у меня есть для вас гораздо лучший ответ.

Сначала внесите небольшое изменение в шаблон кнопки, замените CommandArgument на OnClientClick, и, поскольку вы используете эту кнопку на стороне клиента вместо отправки обратно на сервер, вы можете упростить ее следующим образом:

<asp:Button ID="btn" Text='btn' OnClientClick='<%# Eval("ID", "YourJavascriptFunction({0} - 1); return false;") %>' runat="server" CausesValidation="false" />

У меня есть событие click, вызывающее вашу функцию JavaScript, и оно отправляет параметр разрешенного идентификатора на стороне сервера. Обратите внимание, я сначала вычесть 1, хотя. Это связано с тем, что функция ASP.Net Eval на стороне сервера дает идентификатор, начинающийся с 1. Но каждый из идентификаторов, сгенерированных для ваших элементов ввода текста, начинается с нуля.

Теперь посмотрите на функцию JavaScript ниже.

// Clicking the first button sends in a 0, second sends in a 1, etc.
function YourJavascriptFunction(id) {
  // each of the TextBox1 elements has an ASP.Net server side
  // generated id that ends with GridView2_Textbox1_0,
  // GridView2_Textbox1_1, etc.
  let selectId = "input[id$='GridView2_Textbox1_" + id + "']";

  // The text we use in the querySelector function states
  // find the DOM element with a tag of "input" where the id
  // ends with . . . The $ in id$= is the part that says the
  // value must "end with"
  let textBox1 = document.querySelector(selectId);

  // Now that we have TextBox1 from the same row as the button, 
  // getting the value is easy.
  alert(textBox1.value);
}

Я остановился на примере jQuery, так как эта команда querySelector работает почти во всех браузерах, включая IE8 и выше, поэтому вам не нужно jQuery для чего-то такого простого.

Дайте мне знать, если я смогу помочь дальше.

...