Я работаю над основной страницей бритвы asp.net. Я передаю выбранный идентификатор как успех массива
но моя проблема: выбранное текстовое значение для флажка не передано или не отображено
Проблема произошла на этой линии selectedClassText.push($(this).next('label').text());
когда результат действия отладки string[] classidsText отображает ноль.
Именно мне нужно передать выделенный текст рядом с флажком в виде массива.
Страница бритвы .cs, которая получает текст идентификатора класса
public JsonResult OnGetSubAccountClassName(string[] classIds,string[] classidsText)
{
var assetsSubAccountName = _IAssetsService.GetJdeAssetSubAccountClassName(classIds);
AssetCountGeneration.JDEAssetSubAccountClassNameDetails = assetsSubAccountName;
return new JsonResult(assetsSubAccountName);
}
из jQuery ajax на странице cshtml я отправляю выбранный отображаемый текст selectedClassText
$(document).on('change', '.classCheckbox', function () {
var selectedClassIds = [];
var selectedClassText = [];
$('.classCheckbox:checked').each(function () {
selectedClassIds.push($(this).val());
selectedClassText.push($(this).next('label').text());
});
console.info("selected items" + selectedClassIds)
if (selectedClassIds.length > 0) {
$.ajax({
url: '?handler=SubAccountClassName',
type: 'GET',
traditional: true,
data: { classIds: selectedClassIds,classidsText:selectedClassText },
success: function (response) {
$('#subClassesList').empty();
$('#subClassesContainer').show();
var subClassesContainer = $('<div data-class-id = "' + selectedClassIds + '"></div>');
$.each(response, function (i, item) {
$(subClassesContainer).append('<input type = "checkbox" class = "subclassCheckbox" name = "selectedSubClasses" value = "' + item.subClassAccountId + '" /> ' + item.subClassAccountName + '<br />');
});
$('#subClassesList').append(subClassesContainer);
}
});
Обновленный пост
Я пробую код ниже, но он не сработал, как решить эту проблему console.info() и это дает мне ноль
при создании списка флажков перед событием изменения
я создаю его, как показано ниже
$('#btnDisplay').click(function (event) {
event.preventDefault();
var dropdown = $('#accountclassname-select');
dropdown.empty();
$.ajax({
url: '?handler=AccountClassName',
type: "GET",
dataType: "json",
success: function (response) {
$('#classesContainer').show();
$('#classesList').html(''); // Clear existing classes
$('#classesList').append('<input type = "checkbox" class = "classCheckbox" value = "0" /> All <br />');
$.each(response, function (i, classes) {
$('#classesList').append('<input type = "checkbox" class = "classCheckbox" value = "' + classes.classAccountId + '" /> ' + classes.classAccountName + '<br />');
});
}
});
});
Важные заметки
У меня нет ярлыка, чтобы добавить на него текст
я создаю список, как показано ниже
$(subClassesContainer).append('<input type = "checkbox" class = "subclassCheckbox" name = "selectedSubClasses" value = "' + item.subClassAccountId + '" /> ' + item.subClassAccountName + '<br />');
});

Попробуйте вот так
Вы можете передать текст метки с настраиваемыми атрибутами на входе следующим образом:
<input type = "checkbox" class = "classCheckbox" value = "' + classes.classAccountId + '" data-label = "'+ classes.classAccountName +'"/> ' + classes.classAccountName + '<br />
После этого вы можете получить значение пользовательского атрибута (текста метки), подобное этому, в своем цикле и поместить его значение в массив.
var selectedText = $(this).attr("data-label");
selectedClassText.push(selectedText);
Я только что отредактировал свой ответ, приведенный выше, вы можете воспользоваться его рекомендациями и сделать это в соответствии со своей бизнес-логикой.
Это, безусловно, сработает, но это все равно хуже, чем наличие метки для доступности и увеличение кликабельной области флажка. Мой ответ страдает от той же проблемы, потому что я для краткости опустил атрибут for, но определенно использую метку.
Важные заметки
У меня нет ярлыка, чтобы добавить на него текст
$(subClassesContainer).append('<input type = "checkbox" class = "subclassCheckbox" name = "selectedSubClasses" value = "' + item.subClassAccountId + '" /> ' + item.subClassAccountName + '<br />');
Я предполагаю, что item.subClassAccountName — это строка, в которую вы хотите вставить selectedClassText, если ее флажок установлен.
Поскольку он не находится внутри элемента, это излишне сложно. Поместите его в <label>, и ваш исходный код должен работать:
$(subClassesContainer).append('<input type = "checkbox" class = "subclassCheckbox" name = "selectedSubClasses" value = "' + item.subClassAccountId + '" /> <label>' + item.subClassAccountName + '</label><br />');
Потому что этот код ищет элемент, следующий сразу за флажком, но только если это метка.
selectedClassText.push($(this).next('label').text());
Он перестанет работать, если вы поместите что-нибудь между флажком и меткой.
не работает, я проверяю console.info, не даю мне ничего, это дает мне ноль, я пытаюсь двумя способами, не получилось