2010-11-04 89 views
4

我正在开发与asp.net mvc 2的Web应用程序。这个应用程序,有一个控制器与一些异步操作,返回json或ajax ...我称之为jquery,并且工作正常!从请求获取路由数据

我的脚本位于MasterPage上,因此可以通过任何从此MasterPage继承的View调用此操作。

我的问题是,我怎么知道...请求异步操作的控制器和操作是什么?

我尝试这样做:

if (this.RouteData.Values["controller"] == "Product" && this.RouteData.Values["action"] == "Index") {  
} 

但这获取当前行动(!我assync行动......或者......“这”行动),我想请求。

我看到它,因为如果请求来自Home/Index或Home/Contact或Customer/Index或Product/Index,我的json结果可能不同,所以我想测试控制器和操作。

谢谢!

----编辑

这是我的客户的作业监视系统。我做这样的事情:

//every second I get info in my assync action: 
$(document).ready(function() { 
    var interval = window.setInterval(GetJobs, 1000); 
}); 

function GetJobs() { 

     $.getJSON('<%=Url.Action("Index", "AssyncJob", new { area = "Admin"}) %>', function (r) { 

      /// ----------- Info in MasterPage (All views need it) ------------ // 
      // setup the time of server... 
      $("#time").html(r.time);     
      // setup the jobs are running... (
      $("#running").html(""); 
      if (r.jobcount == 1) 
       $("#running").html("There is one job running!"); 
      else if(r.jobcount > 1) 
       $("#running").html(r.jobcount + " jobs running!"); 


      /// ----------- Info in Home/Index ------------ // 

      if ($("#jobstoped")) { $("#jobstoped").html(r.jobstoped); } 

      // get a list of jobs... (in my action this info is in Cache) 
      if (r.jobs != null) { 
       $(r.jobs).each(function() { 
        if ($("#job" + this.id)) { 

         if (this.IsRunning) { 
          if (!$("#job" + this.id).hasClass("running")) { 
           $("#job" + this.id).addClass("running"); 
          } 
         } 
         else if (this.IsStoped) { 
          if (!$("#job" + this.id).hasClass("stoped")) { 
           $("#job" + this.id).addClass("stoped"); 
          } 
         } 
         else if (this.IsEnding) { 
          if (!$("#job" + this.id).hasClass("finished")) { 
           $("#job" + this.id).addClass("finished"); 
          } 
         } 

      // --- there is a lot of info and rules that I fill for each job in list 


        } 
       }); 

      } 
     }); 

}

我返回一些相关信息和工作正常,但我只需要在家里控制器Index操作返回的工作列表,因为这个...我需要知道请求assync操作的路线是什么......以提高性能并避免不必要的信息!

那么如果你能帮助我......我将不胜感激! = D

再次感谢!

回答

3

如果您的JSON将因不同的路线而有所不同,具体取决于哪条路线,为什么不将不同的路线分隔成不同的行动,那么您就不必做检查。它会使代码更清晰,更容易阅读,比在一个操作中有一堆if-else块来确定哪个ActionResult返回到视图。

+0

嗨amurra,我知道这个,但这个assync操作返回大量的信息,将被称为每秒。有些行动我需要这些信息,其他行动则不需要。我不能分开这个,因为这个架构来自我的客户。我只想测试来自请求和更改结果的控制器和操作。谢谢! – 2010-11-04 11:30:26

+0

@Felipe - 如果所有这些路线都采用相同的动作,那么您将始终拥有相同的控制器和相同的动作。这就是为什么你的检查不起作用。你需要将它们分成不同的控制器和动作来实现你想要的。如果我仍然误解你的问题,那么你可以发布你的js代码。 – amurra 2010-11-04 11:35:37

+0

阿穆拉,对不起我的英文= /但...我的JavaScript是在masterpager上,我有几个视图调用此assync操作(因为我的意见继承masterpage)。我知道这个发布的代码是错误的,因为它总是返回当前操作的RouteData,但我想要获取请求assync操作更改结果的路由的信息。我想要控制器和请求的行动,如果它来自产品/索引或客户/细节或客户/索引任何其他!我不知道你是否理解正确。再次感谢! – 2010-11-04 11:59:27