Возможно ли вернуть список из веб-метода и передать возвращаемое значение для привязки html-выборки с помощью jquery?

#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 в качестве триггера для заполнения выборки