使用Ajax的ASP MVC重定向

时间:2012-07-23 09:16:50

标签: ajax asp.net-mvc

我的重定向拾取现有网址时遇到问题。我有一个页面上有谷歌图表,我在条形图中为条形图添加了一个监听器。当用户单击其中一个条形图时,case语句将确定要传递给路由器的ID。

google.visualization.events.addListener(wrapper, 'select', selectHandler);

function selectHandler() {
  var selection = wrapper.getChart().getSelection()
     var monthsTransform = 0;
        switch(selection[0].column)
           {
            case 1:
                monthsTransform = 0;
                break;
            case 2:
                monthsTransform = 3;
                break;
            case 3:
                monthsTransform = 6;
                break;
            case 4:
                monthsTransform = 12;
                break;
            case 5:
                monthsTransform = 18;
                break;

            //no need to default as already set to 0!
            }
            var url = "newController/newPage/" + monthsTransform;
            window.location.href = url;
        }

我遇到的问题是

window.location.href 

将newController / newPage附加到现有url,因此最终结果如下:

localhost:1234/oldController/oldPage/newController/newPage/id

2 个答案:

答案 0 :(得分:0)

使用window.location.assign(“/ newController / newPage /”+ monthsTransform),而不是window.location.href

如果您在新URL前添加服务器名称和协议,并使用Html.Action html帮助程序生成URL,那就更好了。

答案 1 :(得分:0)

查看我在博客文章中关于在服务器端创建URL的信息:

http://ilovedevelopment.blogspot.co.uk/2012/04/aspnet-mvc-3-generating-actionlink-in.html

为了简洁,我在下面粘贴了它的关键 - 根据需要修改:

string absoluteAction = string.Format("{0}://{1}{2}",
                                                  Url.RequestContext.HttpContext.Request.Url.Scheme,
                                                  Url.RequestContext.HttpContext.Request.Url.Authority,
                                                  Url.Action("ActionName", "ControllerName", new {Id = "Data"}));

这可以在控制器方法中完成,因此您可以进行ajax调用并返回正确的URL“absoluteAction”作为Json结果。