Как я могу отформатировать данные AJAX для SelectList в WebForms?

Я заполняю SelectList с данными, которые возвращаются из вызова AJAX. Однако данные отображаются как один элемент с действительно длинным именем вместо нескольких десятков элементов с короткими именами. Я получаю «ABC DEF GHI JKL MNO» вместо «ABC», «DEF», «GHI» и т. Д. Итак, мой список SelectList получает только один прикрепленный элемент с длинным именем.

Если я просматриваю свои возвращенные данные в отладчике, я могу видеть короткие значения, появляющиеся в отдельных строках по желанию.

Я пробовал использовать «html» вместо «json» для возвращаемого типа, но это не дало результата.

Вот мой серверный код:

private void GetItems(HttpContext context, int myID) 
{
    DataTable datatable = GetMyItems(myID);

    foreach (DataRow myRow in datatable.Rows)
    {
        Response.Write(myRow["ColumnName"].ToString() + Environment.NewLine);
    }
    Response.End();
}

И javascript ...

$.ajax({
    url: "../myAjaxPage.aspx?myID=" + myID,
    type: 'POST',
    datatype: 'json',

    success: function (data) {
        $("<option>").attr("value", data).text(data).appendTo("#<%= mySelectList.ClientID %>");
    }
});

person WEFX    schedule 27.10.2011    source источник
comment
На самом деле вы не возвращаете JSON или HTML из GetItems. data - это всего лишь одна длинная строка, и с этой длинной строкой вы создаете только одну ‹option› с этой длинной строкой в ​​качестве ее значения. Затем рендеринг HTML превращает символы новой строки в пробелы.   -  person millimoose    schedule 27.10.2011


Ответы (2)


Вы не возвращаете JSON, вы просто возвращаете строку. Но это нормально. Просто разделите строку и повторите полученный массив.

success: function (data) {
    $.each (data.split("\n"), function () {
        $("<option>").attr("value", this).text(this).appendTo("#<%= mySelectList.ClientID %>");
    });
});
person gilly3    schedule 27.10.2011

Можете ли вы вернуть объект в виде массива вместо строки? Я думаю, что новые строки игнорируются в ajax. Вы можете сделать $.each(data), если они хранятся в объекте массива, что, я думаю, вы пытаетесь сделать.

person petebowden    schedule 27.10.2011