我想试试这个
Telerik Grid抛出一个循环引用异常,当我试图使用一个实体框架poco类到他的绑定。链接中提到的代码建议用NewtonSoft的json序列化器替换Telerik使用的json序列化器。但是Telerik Grid从不调用CustomGridActionResultFactory注入到Grid中的create方法。有人知道这个代码(上面的链接)的问题吗?
有一个代码库项目,它展示了如何创建自定义GridActionResultFactory。
你应该为TelerikGrid使用一个"特殊的"视图模型。
例如,如果你使用一个像这样的数据库模型
public class Master {
public int Id { get; set; }
public string Name { get; set; }
public List<Detail> Details { get; set; }
}
public class Detail {
public int Id { get; set; }
public string Name { get; set; }
public Master Master { get; set; }
}
您需要创建如下所示的视图模型
public class MasterView {
public int Id { get; set; }
public string Name { get; set; }
}
public class DetailView {
public int Id { get; set; }
public string Name { get; set; }
public int MasterId { get; set; }
}
如果您和我一样,认为仅仅为teleerik网格创建一个单独的视图模型是多余的,您可以将自己的Json提供给从匿名对象列表创建的网格:
//This goes in the View:
Html.Telerik().Grid(Model)
.Name("Grid")
.Columns(columns =>
{
// your column mappings go here
})
.DataBinding(dataBinding => dataBinding.Ajax().Select("_yourMethodReturningJson", "YourControllerName", new { yourJsonMethodParameter = yourViewModel.someField }))
.Pageable()
.Sortable()
.Render();
控制器中的Json方法是这样的:
public JsonResult _yourMethodReturningJson(YourType? yourJsonMethodParameter)
{
var list = database.SomeCollection.Select(x => new
{
SomeColumnName = x.SomeField
});
return Json(list, JsonRequestBehavior.AllowGet);
}
你可以使用一个更好的Json库:http://james.newtonking.com/pages/json-net.aspx