从请求中获取路由数据

时间:2010-11-04 11:10:19

标签: asp.net-mvc ajax asp.net-mvc-2 routing request

我正在使用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

再次感谢!

1 个答案:

答案 0 :(得分:3)

如果你的JSON会有所不同,具体取决于你所拥有的路线,为什么不将不同的路线分成不同的行动,那么你就不必进行你所要求的检查。与在一个动作中使用一堆if-else块来确定返回视图的ActionResult相比,它会使代码更清晰,更容易阅读。