Я использую MVC3 / Entity Framework, мне нужно отправить объект JSON для использования jsTree. JsTree вызывает дочерние элементы каждый раз, когда расширяется узел, поэтому каждый метод get возвращает только один набор вместо всего дерева. Это функция get:
public ActionResult GetTreeview(string id, string company)
{
int parentId = Convert.ToInt32(id);
var cats = (from x in db.Categories where x.ICG_PARENT_ID == parentId orderby x.ICG_CATEGORY_NAME select new { x.ICG_CATEGORY_ID, x.ICG_PARENT_ID, x.ICG_CATEGORY_NAME }).ToList();
var jsTree = new JsTreeModel[cats.Count];
for (int i = 0; i < cats.Count; i++)
{
jsTree[i] = new JsTreeModel
{
data = cats[i].ICG_CATEGORY_NAME,
attr = new JsTreeAttribute { id = cats[i].ICG_CATEGORY_ID },
state = "closed"
};
}
return Json(jsTree, JsonRequestBehavior.AllowGet);
}
и вот модель:
public class JsTreeModel
{
public string data;
public string state;
public JsTreeAttribute attr;
}
public class JsTreeAttribute
{
public int id;
public bool selected;
}
Я уверен, что более короткий / лучший способ сделать это должен существовать, но я только недавно начал изучать LINQ и лямбда-выражения (и MVC), и они пока не совсем понятны для меня. Кроме того, я давно использую этот сайт в качестве ресурса (это замечательно), но это мой первый вопрос. Действительно ли нет кнопки предварительного просмотра, или я слепой?
EDIT: обновлены модель и функция, чтобы изменить тип attr.Id на int. LINQ to Entities не понравилось преобразование строк.