使用 MonoRail 强类型返回 JSON
-
16-09-2019 - |
题
我使用 $.getJSON() 在控制器中调用以下方法
[return: JSONReturnBinder]
public object ProfileFields()
{
var userfields = _profileSvc.GetFields(282);
var fields = from f in userfields
select new {f.ID, f.FieldName};
return fields;
}
我的 _profileSvc 返回了我不需要的额外数据(实际上我收到 NHibernate 错误,因为会话已关闭)。
有更好的方法来做我正在做的事情吗?我应该强类型化我要返回的数据还是这种方法足够?
谢谢。
解决方案
我会使用投影(SetProjection()
) 和 SetResultTransformer()
将结果强类型化到 DTO。
看:
- http://www.nhforge.org/doc/nh/en/index.html#querycriteria-projection
- http://www.junasoftware.com/blog/nhibernate-setresulttransformer-and-dto.aspx
- http://ayende.com/Blog/archive/2007/08/30/Slicing-amp-Dicing-Queries-with-NHibernate.aspx
- http://devlicio.us/blogs/derik_whittaker/archive/2009/05/27/nhibernate-amp-setprojects-setprojects-w-list-gotcha.aspx
其他提示
让您使用已经尝试过
[return: JSONReturnBinder(Properties = "ID,FieldName")]
public object ProfileFields()
{
var userfields = _profileSvc.GetFields(282);
return userfields;
}
我希望这有助于。
首先,我想改变动作的返回值是一个IList ...
我认为会话关闭错误可以从“变种字段”的延迟执行干。如果您改变return语句fields.ToList(),这将迫使lambda表达式的执行,你可能摆脱会话错误的:
[return: JSONReturnBinder]
public object ProfileFields()
{
var userfields = _profileSvc.GetFields(282);
var fields = from f in userfields
select new {f.ID, f.FieldName};
return fields.ToList();
}
不隶属于 StackOverflow