我正在使用asp.net mvc 2开发一个web应用程序。这个应用程序,有一个控制器,带有一些返回json或ajax的异步操作......我用jquery调用它并且工作正常!
我的脚本位于MasterPage上,因此任何继承自此MasterPage的View都可以调用此操作。
我的问题是,我怎么知道...请求异步操作的控制器和操作是什么?
我试过了:
if (this.RouteData.Values["controller"] == "Product" && this.RouteData.Values["action"] == "Index") {
}
但是这会得到当前的动作(我的同步动作......或者......“这个动作!),我想要请求。
我看到它是因为,如果请求来自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
}
});
}
});
}
我返回一些信息并且工作正常,但我只需要在Home控制器上的Index action返回作业列表,因为这......我需要知道路由请求同步操作...以提高性能并避免不必要的信息!
好吧,如果你可以帮助我...我会非常感激! = d
再次感谢!
答案 0 :(得分:3)
如果你的JSON会有所不同,具体取决于你所拥有的路线,为什么不将不同的路线分成不同的行动,那么你就不必进行你所要求的检查。与在一个动作中使用一堆if-else块来确定返回视图的ActionResult相比,它会使代码更清晰,更容易阅读。