#jquery #asp.net #gridview
#jquery ( jquery ) #asp.net #gridview #jquery
Вопрос:
Я хочу, чтобы файл jquery запускался каждый раз, когда заполняется сетка, и файл jquery должен проходить через gridview и выполнять некоторые действия, основанные на определенных условиях. В моей сетке у меня есть столбец с именем StatusID в gridview, и на основе Statuid я хочу задать текст для метки, которая находится внутри другого столбца. Я пытаюсь добиться этого с помощью jQuery. Я не знаю, где я ошибаюсь.
У меня есть внешний JS-файл, который называется Setstatus.js
StatusID — это привязанное поле в gridview. lblStatus — это метка в поле шаблона gridview.
$(document).ready(function () {
$('#<%=gvAsgnments.ClientID%>')
.find('tr')
.each(function (row) {
$(this).each(function (col) {
if (($.trim($(this).find("input[id*='StatusId']").val() === 0))) {
$("input[id*='lblStatus']", $(this)).val('New');
$("input[id*='StatusId']", $(this)).style.display = 'block';
}
});
});
});
Я имею в виду Setstatus.js на моей странице aspx
<script type="text/javascript" src="Scripts/Admin.js" ></script>
Файл jquery не дает никаких результатов. Что я упускаю из виду?
пример HTML-кода:
<div>
<table class="CNIGridView" cellspacing="0" rules="all" align="center" border="1" id="MainContent_gvAsgnments" style="border-collapse:collapse;">
<tr class="CNIGridViewHeader">
<th scope="col" abbr="Status">amp;nbsp;</th>
<th scope="col" abbr="Claim">Claim</th>
<th scope="col" abbr="Claimant">Claimant</th>
<th scope="col" abbr="Date">Date</th>
<th scope="col">StatusId</th>
</tr>
<tr class="CNIGridViewRow">
<td>
<span id="MainContent_gvAdminActiveAsgnments_lblStatus_0"></span>
</td>
<td>
<span id ="MainContent_gvAdminActiveAsgnments_lblClaim_0">MH001025</span>
</td>
<td>
<span id="MainContent_gvAdminActiveAsgnments_lblClaimant_0">Deborah</span>
</td>
<td>10/2/2011 12:00:00 AM</td>
<td>0</td>
</tr>
</table>
</div>
Заранее спасибо
ВВ
Ответ №1:
Это не выполняется или просто не дает результатов? Есть определенная разница. Открывали ли вы консоль javascript или отладчик, чтобы увидеть, возникают ли какие-либо ошибки на странице?
Одна мысль — вы говорите, что lblStatus — это метка. Если это действительно HTML-метка, то input[id*='lblStatus']
она не будет работать как селектор. Так и должно быть label[id*='lblStatus']
. Кроме того, я не думаю, что вы задаете текст элемента label с помощью val()
, который вы бы использовали text()
.
Надеюсь, это поможет.
Комментарии:
1. Спасибо. Когда я отлаживаю, я вижу, что функция выполняется, но не дает никаких результатов. Я внес изменения, о которых вы упомянули, до сих пор безуспешно.
2. Можете ли вы включить фрагмент того, как выглядит HTML-код после его рендеринга?
Ответ №2:
Предполагая, что вы используете Asp.Net метки, метка на самом деле не будет иметь идентификатора того, что вы укажете в своем коде. Самый простой способ прикрепить это — использовать свойство CssClass, чтобы присвоить каждому из них идентификатор и адресовать их, используя его в вашем селекторе.
Что касается вашей повторной привязки GridView, какой метод вы используете для его обновления?
Комментарии:
1. gridview находится внутри multiview <pre><code> <asp: MultiView ID=»mvAdmin» runat=»server»> <asp:View ID=»viewActive» runat=»server»>» align =»center» > </code></pre> . Для привязки я использую метод databind.
2. Я думаю, что проблема с идентификатором заключается в том, почему он использует
*=
operator . api.jquery.com/attribute-contains-selector3. Мне не очень повезло с оператором contains, и я думаю, что вы получите лучшую производительность с помощью селектора классов, чем при сравнении каждого идентификатора в DOM.
4. Из вашего вопроса это звучало так, как будто может быть задействован AJAX. Используете ли вы UpdatePanels или что-то в этом роде?
5. Тогда использование CssClass должно работать для вас. Обычно я использую такие вещи для jQuery.