0

我有一个应用程序,用户登录后,使用RedrirectToAction()将用户重定向到某个控制器的索引页。RedirectToAction和ActionLink之间的差异导致.post()不工作

RedirectToAction("Index", "MyController"); 

它重定向我//MyApp/MyController/

我也对母版视图导航,我使用ActionLink的:

@Html.ActionLink("Index", "SomeOtherController") 
... (other links) 

重定向我//MyApp/SomeOtherController

问题是**/**性格上第一条路线的结束。我在onClick调用jQuery .post()的母版页上进行了partialView。

function SomeFunction(id) { 
    $.post("Controller/Action", { id: id }, 
     function() { 
      ... some code 
     }); 
} 

但是当我调用该函数从登录它改掉访问此航线后重定向:

/MyController/Controller/Action 

不extist。如果我改变我的文章呼吁

$.post("../Controller/Action", ... 

它工作正常,但后来becouse他们没有**/**对路线的终点不会为导航链接工作。

我该怎么办?如何从RedirectToAction和ActionLink获取唯一路径,最终是否有**/**

注:

我母版页上使用<a></a>用于导航和与**/**在年底进入的路径,但我宁愿使用ActionLink的

回答

1

这里的关键是,你需要MVC来生成路由你传递给你的jQuery函数的URL。

1.如果您的jQuery代码嵌套您的视图中,则可以执行以下操作:

function SomeFunction(id) { 
    $.post('@Url.RouteUrl("Action", "Controller")', { id: id }, 
     function() { 
      ... some code 
     }); 
} 

2.如果您的jQuery代码位于一个外部文件(如myScripts.js)那么你将需要以某种方式将MVC生成的路由传递给你的jQuery函数。由于这不是直接绑定到元素,所以您可能最好将其设置为视图中的隐藏元素。

查看

<input type="hidden" id="jsRoute" value="@Url.RouteUrl("Action", "Controller")"/> 

JS

function SomeFunction(id) { 
    $.post('$("#jsRoute").val()', { id: id }, 
     function() { 
      ... some code 
     }); 
} 
+0

谢谢你的提示,但你知道为什么会出现在形成了该两种方法的URL区别吗? – freshbm 2013-03-19 22:39:30

+1

我不确定你的意思 - 在我提供的两个变体中,URL将以相同的方式形成。然而,剃刀助手(@ Url.RouteUrl等)不能在.js文件中运行,所以你必须找到一种方法来通过它。如果你的意思是来自你的两个方法,这个问题来自于在http://www.mywebsite.com/和http://www.mywebsite。com/controller/action看起来与浏览器非常不同,你的相对路径很快就会搞乱。 – Tommy 2013-03-20 14:51:14

+0

我的意思是为什么Action.Link和RedirectToAction有所不同。为什么他们不创建相同的网址? – freshbm 2013-03-20 15:08:38

相关问题