2010-11-04 135 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