#c# #jquery #asp.net #ajax
#c# #jquery #asp.net #ajax
Вопрос:
Я пытаюсь привязать html-выбор, и я написал для этого веб-метод, который возвращает список. Как я могу использовать это возвращаемое значение для привязки моего элемента управления select с помощью jquery …. ? Я застрял… Код прилагается к настоящему :
function columnDropdownScript() {
var reqTableNameParameter = "Designation"; //$('#ddlTableNames').text;
var requestTableParameters = '{'
'selTableName:"' reqTableNameParameter '"}';
// Configure AJAX call to server
$.ajax({
type: "POST",
url: "Webtop.aspx/FillColumnDropdown",
data: requestTableParameters,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: DisplayColumnNames, //Event that'll be fired on Success
error: DisplayError //Event that'll be fired on Error
});
}
function DisplayColumnNames(serverResponse) {
$("#ddlColumnNames").get(0).options.length = 0;
$("#ddlColumnNames").get(0).options[0] = new Option("Select", "-1");
$.each(serverResponse.d, function(index, item) {
$("#ddlColumnNames").get(0).options[$("#ddlColumnNames").get(0).options.length] = new Option(item.Display, item.Value);
});
alert('Check Column DropDown');
}
[WebMethod]
public static List<string> FillColumnDropdown(string selTableName)
{
int x=1;
string selectedTable = selTableName;
List<string> columnsToBind = new List<string>();
foreach (Columns column in Metadata.columnsOfSelectedTables)
{
if (column.TableName.Equals(selectedTable))
{
columnsToBind.Add(column.ColumnName);
}
}
return columnsToBind;
}
Комментарии:
1. В чем именно проблема? Работает ли ваш ajax и получаете ли вы все данные. Вы просто ищете способ, как сгенерировать выпадающий список из коллекции строк?
2. ajax работает. я имею в виду, что он использует метод we. я возвращаю список оттуда, но не знаю, как использовать возвращаемое значение для привязки элемента управления select.
3. есть ли какое-либо свойство для получения длины возвращаемого значения?
Ответ №1:
// Я не тестировал это, но, на мой взгляд, это должно сработать // (обратите внимание, это добавление к списку. возможно, потребуется очистить, если вызывается несколько раз)
$.ajax({
type: "POST",
url: "Webtop.aspx/FillColumnDropdown",
data: requestTableParameters,
//contentType: "plain/text",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
for (var i = 0, l = msg.length; i < l; i ) {
$("#the_selectbox").append("<option>" msg.d[i] "</option>");
}
},
error: DisplayError //Event that'll be fired on Error
});
Комментарии:
1. Я думаю о том же. $(«#the_selectbox»).empty(); очистит текущее содержимое. Вам нужно будет изменить идентификатор и обработать вашу фактическую структуру данных json, но это способ добавления в список выбора с помощью jQuery.
2. Все еще не удается привязать это с помощью msg.d[i].
3. @Chris мое предупреждение даже не отображает сообщение.d[0], если я его жестко кодирую.
4. Начните с выяснения того, что вы получаете. В начале функции успеха вы можете установить оповещение, чтобы убедиться, что обратный вызов вообще запускается? А затем оповещения (msg), чтобы увидеть, что проходит?
5. Понял… Проблема была с циклом, показанным здесь. это msg.d.length, чтобы получить правильную длину. Большое спасибо за помощь. Теперь проблема с элементом управления select. Цикл выполняется, но элементы не отображаются.
Ответ №2:
Просто из любопытства, почему вы создали веб-метод для этого вместо добавления триггера onload / postback?
И где вы приводите свой список к json в коде позади? Разве возвращаемый тип не будет xml?
В любом случае, свойства объектов jQuery запрашивают анонимные функции:
$.ajax({
// ...
success:function(serverResponse){
//success code
},
error:function(serverResponse){
//error code
},
});
Комментарии:
1. Я использую это во всплывающем окне div и у меня проблемы с сохранением видимости div. Вот почему перешел к веб-методу
2. Ну, вы могли бы использовать событие, которое показывает div в качестве триггера для заполнения выборки