Проблема проектирования ASP .NET MVC 3 (загрузка данных через Ajax)

У меня есть категория класса, которая представляет категорию продуктов... Поэтому я создал представление, которое показывает древовидное представление с моими категориями слева... Когда пользователь выбирает узел древовидного представления, я хотел бы показать все данные категории в одном и том же Страница/просмотр (справа)

Что я сделал до сих пор, так это загрузил JQuery TreeView через Ajax... И добавил событие щелчка на каждом узле TreeView... Щелчок вызывает через Ajax выбранную категорию, например (CategoryController):

    [HttpGet]
    public ActionResult GetCategory(string idCategory)
    {
        if (ModelState.IsValid)
        {
            var _category = _categoryRepository.Get(Convert.ToInt16(idCategory));

            if (Request.IsAjaxRequest())                
                return Json(_category, JsonRequestBehavior.AllowGet);

            return RedirectToAction("Index");
        }

        return View();
    }

Итак, я получил категорию JSON на клиенте и должен вручную заполнить все поля...

Это правильный/лучший способ сделать это? Я что-то упускаю?

Спасибо пока

Павел


person Paul    schedule 10.03.2011    source источник
comment
Используете ли вы плагин Bassistance JQuery TreeView?   -  person Maxim Gueivandov    schedule 10.03.2011
comment
Никогда не использовал Jstree, но я полагаю, что вам потребуется создать действие, которое возвращает данные JSON, содержащие элементы категории, вместо представления по умолчанию (если только оно не представляет ваши данные JSON).   -  person Maxim Gueivandov    schedule 10.03.2011


Ответы (2)


Если вы используете JSTree, вы можете использовать подключаемый модуль JSON_DATA для возврата данных JSON с вашего сервера и попросите JSTree построить ваши узлы для вас. Я не знаю, как выглядит ваш объект _category, но документация предоставляет структуру, которую ожидает JSTree.

{ 
    data : "node_title", 
    // omit `attr` if not needed; the `attr` object gets passed to the jQuery `attr` function
    attr : { id : "node_identificator", some-other-attribute : "attribute_value" }, 
    // `state` and `children` are only used for NON-leaf nodes
    state: "closed", // or "open", defaults to "closed"
    children: [ /* an array of child nodes objects */ ]
}

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

Надеюсь, это поможет!

person David Hoerster    schedule 10.03.2011
comment
Спасибо, но с моим jstree уже все в порядке! Он отлично работает... Мой вопрос о другой части... Как лучше всего заполнить атрибуты категории, когда я нажимаю на какой-либо узел, в том же представлении, в котором был построен TreeView! - person Paul; 11.03.2011
comment
Дэвид, в настоящее время я застрял в извлечении узлов из контроллера, можете ли вы привести пример, показывающий, как вы заполняете данные, состояние и дочерние элементы в контроллере? буду очень признателен - person Sue; 18.08.2011
comment
Дэвид или Пол, можете ли вы привести простой пример того, как вернуть данные json из кода на стороне сервера? - person Sue; 19.08.2011

Я решил, что с помощью KnockoutJs с подключаемым модулем сопоставления... Он отлично работает!

Спасибо, в любом случае...

Павел

person Paul    schedule 15.04.2011