В раскрывающемся списке формы редактирования jQgrid есть дополнительная цитата

У меня есть MVC2 EditStatesController:

     public JsonResult GetStates()
     {
         string statesToReturn = GetStates();  // returns "1: Alabama; 2: Alaska; 3:  Arizona; 4: Arkansas"
         return Json(statesToReturn);
     }

это код, который вызывает контроллер:

//get States
    var listOfStates = $.ajax({
        url:    '/EditStates/GetStates', 
        type: 'POST',
        async: false, 
        success: function(data, result) {
            if (!result) 
                alert('Failure to retrieve States.');
        }
    }).responseText;

В раскрывающемся списке есть список элементов, но последний элемент имеет дополнительный "(двойная кавычка), поэтому последним штатом Вайоминг является Вайоминг".

Я искал другие вопросы, но не нашел похожего. Вы знаете, почему это происходит и как это исправить? Спасибо, Дженни.


person Boroda    schedule 13.07.2011    source источник
comment
О каком выпадающем меню вы говорите и как оно связано с кодом, который вы показали? Какая связь между вашим вопросом и jqgrid?   -  person Darin Dimitrov    schedule 14.07.2011
comment
Выпадающий список, о котором я спрашиваю, - это раскрывающийся список в форме редактирования jqgrid. Для этого требуется, чтобы значения были в определенном формате. Похоже, в какой-то момент обработки - может быть, преобразование Json добавляет лишние кавычки?   -  person Boroda    schedule 14.07.2011


Ответы (1)


параметры поиска могут использовать dataUrl и, при необходимости, buildSelect вместо value, который вы пытаетесь использовать в настоящее время.

jqGrid необходимо создать фрагмент HTML следующим образом:

<select>
    <option value="1">Alabama</option>
    <option value="2">Alaska</option>
    <option value="3">Arizona</option>
    <option value="4">Arkansas</option>
</select>

Таким образом, вы можете либо предоставить данные из действия вашего контроллера напрямую, либо предоставить любой другой вывод, например вывод JSON:

[
    {"id":1, "name":"Alabama"},
    {"id":2, "name":"Alaska"},
    {"id":3, "name":"Arizona"},
    {"id":4, "name":"Arkansas"}
]

и используйте обработчик событий buildSelect для преобразования данных JSON во фрагмент HTML с помощью <select>...</select>. См. ответ для деталей.

Если вы выберете способ, у вас не будет проблем со специальными символами, такими как '"', ':', ';' и так далее.

person Oleg    schedule 13.07.2011
comment
Спасибо, но кажется, что мое решение сработало, кроме кавычек. Я только что нашел решение своей проблемы здесь json.org/js.html. Похоже, мне нужно было преобразовать текст JSON в объект и выполнить JSON.parse(listOfStates). Вот и избавился от кавычек. - person Boroda; 14.07.2011
comment
@Boroda: посмотрите на близкий ответ. Использование объекта вместо строкового значения для value может решить некоторые проблемы, но ваш текущий способ имеет много недостатков. Использование $.ajax с async: false всегда очень плохо. dataUrl будет называться асинхронным и только если это необходимо. Если пользователь, например, не открывает диалоговое окно поиска и раскрывающийся список не нужно создавать, dataUrl не будет вызываться. могу продолжить... - person Oleg; 14.07.2011
comment
Почему очень плохо использовать $.ajax с async: false? Мне нужно получить данные с сервера. Я не использую параметры поиска. Нужно ли использовать параметры поиска для создания раскрывающегося списка в форме редактирования? - person Boroda; 15.07.2011