从请求获取路由数据
问题描述:
我正在开发与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
再次感谢!
答
如果您的JSON将因不同的路线而有所不同,具体取决于哪条路线,为什么不将不同的路线分隔成不同的行动,那么您就不必做检查。它会使代码更清晰,更容易阅读,比在一个操作中有一堆if-else块来确定哪个ActionResult返回到视图。
嗨amurra,我知道这个,但这个assync操作返回大量的信息,将被称为每秒。有些行动我需要这些信息,其他行动则不需要。我不能分开这个,因为这个架构来自我的客户。我只想测试来自请求和更改结果的控制器和操作。谢谢! – 2010-11-04 11:30:26
@Felipe - 如果所有这些路线都采用相同的动作,那么您将始终拥有相同的控制器和相同的动作。这就是为什么你的检查不起作用。你需要将它们分成不同的控制器和动作来实现你想要的。如果我仍然误解你的问题,那么你可以发布你的js代码。 – amurra 2010-11-04 11:35:37
阿穆拉,对不起我的英文= /但...我的JavaScript是在masterpager上,我有几个视图调用此assync操作(因为我的意见继承masterpage)。我知道这个发布的代码是错误的,因为它总是返回当前操作的RouteData,但我想要获取请求assync操作更改结果的路由的信息。我想要控制器和请求的行动,如果它来自产品/索引或客户/细节或客户/索引任何其他!我不知道你是否理解正确。再次感谢! – 2010-11-04 11:59:27