как игнорировать запятую при возврате json mvc - PullRequest
0 голосов
/ 01 апреля 2010

Я возвращаю JSON из моего контроллера в мое представление, чтобы заполнить текстовое поле автозаполнения jquery в MVC. Проблема в том, что некоторые из моих данных содержат запятые и поэтому разделяются помощником автозаполнения.

Вот мой код.

Контроллер:

    public ActionResult GetData()
    {
        var data = repository.GetData();

        return Json(data);
    }

Просмотр (скрипт):

    $.post("../MyController/GetData",

        function(data) {
        var evalData = eval(data) + ""; //formats the text

        $("#Data").autocomplete(evalData.split(","),
        {
            max: 500,
            matchContains: true
        });
    });

Как видите, я использую помощник jquery .split для разделения возвращаемого Json. Должен ли я использовать регулярное выражение или я должен использовать совершенно другой подход?

Ответы [ 2 ]

1 голос
/ 04 апреля 2010

Я предполагаю, что вы используете Автозаполнение , встроенное в jQuery UI 1.8 . Если да, у вас есть несколько разных вариантов.

  1. Основываясь на одном из примеров, доступных в документации, вы можете просто дать ему строку с указанием URL-адреса вашей службы, и вам не придется беспокоиться о парсинге возврата самостоятельно. Так что-то вроде:

    $("#Data").autocomplete({
        source: "../MyController/GetData"
    });
    

    Ваши действия, скорее всего, должны будут отвечать на запросы, а также отправлять сообщения, и ваши данные могут быть в форме [{ label: "something", value: "1" }, ... ] Что вы могли бы сделать, формируя данные с помощью Linq запроса перед отправкой.

    var data = from d in repository.GetData()
               select new
               {
                   label = d.[whatever you want the label to be]
                   value = d.[whatever you want the value to be]
               };
    return Json(data);
    
  2. Вы можете объединить вашу текущую реализацию с частями приведенного выше примера и получить что-то вроде этого:

    $.post("../MyController/GetData",
        function(data) {
            $("#Data").autocomplete({
                source: JSON.parse(data),
                max: 500,
                matchContains: true
            });
        });
    

    Предполагается, что data имеет форму [{ label: "something", value: "1" }, ... ] (см. 1 для определения формы с использованием Linq). Парсер JSON позаботится о проблеме с запятыми в кавычках.

  3. Вы также можете указать метод для вызова , когда вы хотите получить данные.

    $("#Data").autocomplete({
        source: function(request, response) {
            $.ajax({
                url: "../MyController/GetData",
                dataType: "json",
                success: function(data) {
                    response( data );
                }
            })
        }
    });
    

    (см. Выше о том, как формировать данные с помощью Linq)

Несколько комментариев о вашей текущей реализации.

  • Вам следует рассмотреть возможность использования UrlHelper вместо жесткого кодирования URL-адреса на случай, если вы когда-нибудь измените маршруты.

  • Вместо eval вы должны использовать библиотеку JSON2.js для анализа возвращаемого значения из вашего действия. Как правило, он немного более безопасный и обеспечивает более высокую производительность в новых браузерах, которые поддерживают собственный анализ JSON .

0 голосов
/ 02 апреля 2010

Хорошо, после долгих перемоток назад и нескольких правок, вот мой окончательный ответ. :)

    $.post("../MyController/GetData", function(data) {
        $("#Data").autocomplete({
            source: data
        })
    });

Кроме того, я считаю, что функция разбиения - это простой javascript, а не jquery.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...