小编ter*_*ran的帖子

ASP .Net MVC 5 JsonResult缓存

谁能解释我如何JsonResult在MVC 5应用程序中实现缓存操作?我想ajax使用[OutputCache()] 属性来缓存一些被调用的动作.其中一些操作返回ActionResulthtml-content,一些JsonResult具有系列化名单{Id, Title}对其中我将用来构造下拉列表.

我的目标是减少数据库查询(构建ViewModel时)和服务器请求(当使用ajax调用时).

所以,我的代码看起来像下面的代码片段:

[OutputCache(Duration=60*60*24)]
public async Task<ActionResult> SearchCaseOrgDialog(){
    //extract data return html page
    return View();
}

[OutputCache(Duration=60*60*24)]
public async Task<JsonResult> AjaxOrgDepartments(){
    //query database, serialize data, return json
    var result = await ctx.OrgDepartments
                          .Select(d => new { 
                                        Id = d.Id, 
                                        Title =  d.Title }
                                 )
                          .ToListAsync();

    return Json(result, JsonRequestBehavior.AllowGet);
}
Run Code Online (Sandbox Code Playgroud)

当我查看FireFox工具面板时,我会看到下一张图片 - 内容Html: FF缓存html内容

这里Firefox使用ajax-requested页面的客户端缓存版本.

但情况因内容而json异: FF不缓存json内容

它不缓存内容,似乎从服务器(服务器端缓存)传输数据.

在这两种情况下,响应头看起来都一样:

Cache-Control:"public, max-age=86400, …
Run Code Online (Sandbox Code Playgroud)

ajax asp.net-mvc json caching asp.net-mvc-5

8
推荐指数
1
解决办法
3134
查看次数

是否可以使用TypeKind = tkMethod为TRttiType创建TRttiMethod实例?

大家好:)这是我在stackoverflow的第一个问题:)

在Delphi XE2 RTTI中我们有TRttiMethod类,它具有CreateImplementation()动态创建过程或函数的功能,它具有相同的签名和与其正文相同的方法.

使用TRttiContext.getMethods()/ getMethod()我们可以获得类方法的集合 - TRttiMethod的集合.

文档说(http://docwiki.embarcadero.com/VCL/en/RTTI.TRttiMethod)不要直接创建TRTTiMethod,并使用getMethods()来获取其实例.

所以,如果我们有TRTTIMethod实例,我们可以动态创建具有相同签名的方法,并在以后调用它.

问题是..例如,我们有TNotifyEvent ... TRttiContext.getType(typeinfo(TNotifyEvent))返回TRttiType具有typekind =的实例对象tkMethod.我们知道TNotifyEvent的签名是对象的过程(sender:TObject);

有可能得到TRttiMethod这个吗?我想为事件动态创建eventHandler,TRttiMethod.CreateImplementation() 或者可能有另一种方法动态创建方法实现?

PS:想法是创建类似事件链的东西.在编译时,我们不知道事件类型/签名,因此我们可以使用泛型,如TEvenChain <TNotifyEvent>.Chain在已注册的事件处理程序上有集合,因为我们在编译时不知道处理程序类型,我们必须动态创建它,并且该处理程序只获取其参数并使用它们调用已注册的处理程序.

更新: 这里是一些代码(想法是创建事件处理程序链):

procedure TMainForm.FormCreate(Sender: TObject);
begin
    FEventChain := TNotifyChain.Create();
    FEventChain.AddHandler(event1);
    FEventChain.AddHandler(event2);   

    TestButton.OnClick := FEventChain.EventHandler;
end;
Run Code Online (Sandbox Code Playgroud)

Event1&event2(sender : TObject)形式的方法; 它不是一般示例(T在这种情况下是NotifyEvent/TChain <TNotifyEvent>) TEventChain.EventHandlerTNotifyEvent

TNotifyChain

TNotifyChain = class(TObject)
  strict private
    FEvent : TNotifyEvent;
    FItems : TList<TNotifyEvent>;

    FCtx : TRttiContext; …
Run Code Online (Sandbox Code Playgroud)

delphi rtti delphi-xe2

7
推荐指数
1
解决办法
1366
查看次数

标签 统计

ajax ×1

asp.net-mvc ×1

asp.net-mvc-5 ×1

caching ×1

delphi ×1

delphi-xe2 ×1

json ×1

rtti ×1