Спасибо, что включили пример 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 для чего-то такого простого.
Дайте мне знать, если я смогу помочь дальше.