Я использую gridview с пейджингом для отображения таблицы базы данных. Когда пользователь вставляет UserID, я хочу проверить дубликаты в пользовательской функции проверки на стороне клиента. Я должен пройти через все значения в сетке, а не только те, которые отображаются. У меня возникли проблемы с получением всех значений в столбце UserID, чтобы проверить наличие вставленного UserID. Это разметка:Проверка вставки сетки для дубликатов
<asp:TemplateField HeaderText="UserID">
<HeaderTemplate> UserID
<asp:ImageButton ID="senigvUserIDFilter" runat="server" ImageUrl="Images/filter.png" OnClientClick="return ShowHideFilterTxtBox('senigvTxtUserIDFilter')" />
<asp:TextBox ID="senigvTxtUserIDFilter" runat="server" AutoPostBack="true" style="display:none;" ClientIDMode="Static" OnTextChanged="senigvGridFilter_TextChanged">
</asp:TextBox>
</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="senigvLblUserID" runat="server" Text='<%# Bind("UserID") %>' ClientIDMode="Static"
></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:Label ID="senigvLblEditUserID" runat="server" Text='<%# Bind("UserID") %>'></asp:Label>
</EditItemTemplate>
<FooterTemplate>
<asp:TextBox ID="senigvTxtBxInsertUserID" runat="server" Text='<%# Bind("UserID") %>' ClientIDMode="Predictable"></asp:TextBox>
<asp:RequiredFieldValidator ID="senigvRequiredFieldInsertUserID" ControlToValidate="senigvTxtBxInsertUserID" runat="server"
ErrorMessage="Required field." ValidationGroup="InsertSenderValidation" Display="Dynamic" CssClass="message-error">
</asp:RequiredFieldValidator>
<asp:RegularExpressionValidator ID="senigvMaxValInsertUserID" ControlToValidate="senigvTxtBxInsertUserID" runat="server"
ErrorMessage="Maximumn length is 40." ValidationGroup="InsertSenderValidation" Display="Dynamic" CssClass="message-error"
ValidationExpression="^.{1,40}$" >
</asp:RegularExpressionValidator>
<asp:CustomValidator ID="senigCustomDupValInsertUserID" runat="server" ControlToValidate="senigvTxtBxInsertUserID" CssClass="message-error"
ErrorMessage="*" ClientValidationFunction="ValidateUserID" EnableClientScript="true"
ValidationGroup="InsertSenderValidation">
</asp:CustomValidator>
</FooterTemplate>
</asp:TemplateField>
Это функция JQuery, 'ValidateUserID'
function ValidateUserID(sender, args) {
args.IsValid = true;
sender.innerHTML = '';
var table = document.getElementById("#UserInfoGridVew");
var tbody = table.tBodies[0];
//loop thru all UserIDs
for (i = 0, rowLen = tbody.rows.length; i < rowLen; i++) {
row = tbody.rows[i];
var currentUserID = row.cells[1].innerHTML;
alert('currentUserID: ' + currentUserID);
if (args.Value == currentUserID) {
//if values are equal; input invalid; set error message
args.IsValid = false;
sender.innerHTML = "UserID exists.";
break;
}
}
};
Когда я использую эту функцию, я получаю ошибку Object required
на линии var tbody = table.tBodies[0];
мне нужно для доступа ко всем строкам данных в gridview, затем проверьте столбец UserID для дубликатов. Как я могу это сделать?
Я пробовал свой код и получаю сообщение об ошибке, поскольку переменная 'table' имеет значение null. Идентификатор gridview имеет атрибут, установленный на 'ClientIDMode = 'Static''. Я проверил HTML и скрипт, и идентификатор отображается как «UserInfoGridView». –
Упс, понял. Когда мы используем javascript, мы не добавляем # перед идентификатором. Таким образом, это должно быть просто document.getElementById ('UserInfoGridView'); # перед добавлением идентификатора в JQuery. –
Спасибо, что поймали это. Я тоже должен был знать. Но переменная 'table' возвращает только 18 строк, потому что это размер страницы. Мне нужны все строки в datatable. Я попытался использовать 'datatable', но переменная всегда имеет значение null. –