MVC Jquery 跳转到控制器动作。

12
在Jquery中,我需要告诉程序前往EmployeeController和Empl操作。我要如何告诉它这样做?我想用简单的方法来实现这一点,而不使用ajax。
在jQuery中,如何直接跳转到EmployeeController和Empl动作而不使用ajax?

你是什么意思?你想要跳转到一个新页面吗? - Dismissile
“Go to”?要去哪里?整个页面?一个AJAX调用? - Adam Terlson
5个回答

18
window.location.href = "/{controller}/{action}" //in your case, /employee/empl

这能够工作是因为在你的Global.asax.cs文件中指定了路由。我建议你学习一下它的工作原理,因为这是MVC的基础之一....


最好使用 location.href = 'whatever'; - BigMike
@BigMike 在末尾添加了“.href”。感谢您的反馈,您可能是正确的,因为window.location是一个对象,这样或许更清晰明了。 - Adam Terlson
1
如果我想传递一个参数怎么办? - Dainius Kreivys
如果有人想要传递参数,只需执行window.location.href = "/{controller}/{action}?{parameter}={value}&{parameter2}={value}"。 - Adam R. Turner

5

到目前为止,所有的回答都很好,但使用神秘字符串来构建URL让我感到不适。我更喜欢像这样添加一个扩展名:

public static string GetUrl(this HtmlHelper, helper, string Action, string Controller, object RouteValues)
{
    UrlHelper Url = new UrlHelper(HttpContext.Current.Request.RequestContext);
    return Url.Action(Action, Controller, RouteValues);
}

然后在我的js代码中使用:

location.href = '@Html.GetUrl("Action", "Controller", new { foo=Model.Foo })';

这个框架更加一致,内部关注路由,并且给我一个集中处理Url的中心点。

还有一件事,

window.location = "whatever";

很好而且有效,仍然可以使用。

location.href = "whatever"; 

更可取。
希望有所帮助。

1
已经有一个辅助方法可以处理这个问题:@Url.Action("Action", "Controller", new { foo = Model.bar }) - Kristof Claes
@KristofClaes:是的,当然有。正如您所看到的,它在内部使用。自己的助手只是为了让我可以以集中的方式在URL上执行一些不好的操作,理想情况下,在理想的世界中不需要这样做,但有时要求非常有趣,我不得不采取这种方法。当然,我已经从示例代码中删除了我的逻辑,并发布了我的真实助手的模拟 :) - BigMike
另一个缺点是,当执行重定位的脚本不在视图中时(正如它不应该在视图中),会发生什么?你不能使用你的辅助方法。相反,最好明确地重定向到一个路由。 - Adam Terlson
@AdamTerlson:没有什么不利之处,我通常在js对象的属性中传递url(和模型prop)(我是一个js文件中只有js代码的纯粹主义者)。在这种情况下,我也看不到使用MS Action辅助程序的方法。在Razor引擎能够在js文件中应用其魔法之前,我想我们应该接受这个“不利之处”。我的解决方案的重点是保持url生成的通用性(使用RouteData结构),即不暗示某个路由存在并让MVC引擎解决它们的问题。 - BigMike
没错,我并不是在为Action或者你的方法辩护,我只是在说这些方法都行不通,他只能像我在答案中建议的那样手动编写URL。有时候你只需要假设导航会起作用。 - Adam Terlson
抱歉,我不明白你的意思(可能是因为我的英语非常糟糕)。如果我需要在JS文件中使用URL,我只需编写一个函数/对象,并将其设置在视图中(通过document.ready()或直接在JS调用中)。请原谅我,但我无法想象任何情况下流程不至少从视图/控制器中经过一次,你能给我举个例子吗? - BigMike

3

当应用程序发布后,被接受的答案不起作用。 我不得不使用

window.location.href='@Url.Action("ActionName","ControllerName")'

希望能对您有所帮助。

0

对URI结构和路由进行假设,但是:

window.location = '/employee/empl/';


只有当他的路由设置为/controller/action时才能执行。 - Dismissile
是的。刚刚添加了一个“免责声明”。 - simshaun

0

并且用于参数

window.location.href = "/{controller}/{action}?parm1=val1&parm2=val2" 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接