Использование списка строковых элементов в качестве источника для компонента Select2

0

Я пытаюсь разработать контроллер тегов для этого веб-сайта, над которым я работаю, но я не могу заставить json-part работать правильно.

Чтобы начать сверху, у меня есть скрытый элемент ввода в моем cshtml-view (JS, извлеченный из этого сообщения SO):

<input type="hidden" id="tagController" style="width: 350px;" />
...
    $(document).ready(function () {
        var lastResults = [];

        $("#tagController").select2({
            multiple: true,
            placeholder: "Please enter tags",
            tokenSeparators: [","],
            ajax: {
                multiple: true,
                url: "/UnitDetails/GetTagsAsJson/",
                dataType: "json",
                type: "POST",
                data: function (term, page) {
                    return {
                        json: JSON.stringify({ results: [{ id: "foo", text: "foo" }, { id: "bar", text: "bar" }] }),
                        q: term
                    };
                },
                results: function (data, page) {
                    lastResults = data.results;
                    return data;
                }
            },
            createSearchChoice: function (term) {
                var text = term + (lastResults.some(function (r) { return r.text == term }) ? "" : " (new)");
                return { id: term, text: text };
            },
        });
    });

Затем у меня есть действие в моем контроллере:

[HttpPost]
public JsonResult GetTagsAsJson()
{
    return Json(Model.TagsAvailable, JsonRequestBehavior.AllowGet);
}

Затем список TagsAvailable заполняется в моем действии индекса:

...
foreach (var tag in GetAvailableTags())
{
    Model.TagsAvailable.Add(tag.Name);
}
...

Наконец, GetAvailableTags() вызывает службу wcf, которая возвращает набор TagContracts в BaseTagController:

public List<TagContract> GetAvailableTags()
{
    return UnitClient.GetAllUnitTags().Select(unitTag => new TagContract
                                                             {
                                                                 Id = unitTag.Id,
                                                                 Name = unitTag.Name
                                                             }).ToList();
}

При проверке консоли в chrome я получаю следующую ошибку: Failed to load resource: the server responded with a status of 500 (Internal Server Error)

Для записи я знаю, что служба возвращает запрошенные данные, это больше проблема с написанным мной кодом, я думаю :)

  • 0
    Вы не публикуете какое-либо действие с данными, но подпись вашего метода для этого действия не принимает параметров. Я не думаю, что GetTagsAsJson () получает удар, он пытается вызвать GetTagsAsJson (результаты)
  • 2
    Вы должны попытаться отладить действие GetTagsAsJson и посмотреть, когда оно сломается. Кроме того, зачем использовать HttpPost и возвращать json, разрешенный в GET?
Теги:
razor
asp.net-mvc
jquery-select2

1 ответ

0
Лучший ответ

Пришел через учебник, который помог мне выполнить то, что я хотел. Просто просто перепишите код в соответствии с моими значениями.

Код Github можно найти здесь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню