如何从JQuery调用控制器方法?

时间:2010-02-10 16:53:45

标签: c# asp.net-mvc jquery

我有一个asp.net(非mvc)的ajax代码来调用webMethod从服务器获取请求的其他数据。但我似乎无法弄清楚在MVC中提供我的JQuery的URL。

<script type="text/javascript" language="javascript">
function SubmitAjax(url, message, successFunc, errorFunc) {
    $.ajax({
        type:"POST",
        url:url,
        data:message,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success:successFunc,
        error:errorFunc
        });

};

我不想将整个相关数据列表传递给每个到达页面的人的选择列表,因为并非所有人都需要此功能。所以我想通过JQuery调用控制器或webmethod,但似乎无法找到如何解决MVC中的URL。

我注意到这篇文章: JQuery Ajax call gets resolved to the current Controller Folder, Instead of root Folder

是$ .getJson的mvc方法吗?这对我的用例来说是一个很好的解决方案吗?我只需要返回一个字符串url,或者如果找不到我正在寻找的空字符串。我是否需要为$ .getJSon方法添加一个?是MVC的一部分还是JQuery的一部分?前导斜杠是指向Application root还是server root?

5 个答案:

答案 0 :(得分:3)

试试这篇文章: Basic AJAX example with ASP.NET MVC?

或者这个: How to get the Json object for drop down?

他们应该给你一些指示。

本质上,$ .getJson是一个jQuery方法,而不是MVC方法,但是想要将它与MVC控制器结合使用,返回一个Json结果。

答案 1 :(得分:2)

嗯,我的猜测是你在构建url时遇到了麻烦。如果你在url之前没有斜杠,它将相对于你当前的url。因此,如果当前网址为:/Home/Index并且您有以下链接:<a href="Ticket/CheckForInstaller">Text</a>,则该链接将指向以下网址:/Home/Index/Ticket/CheckForInstaller。这始终是浏览器中的行为。如果您在webforms应用程序的文件夹中有一个页面,则会发生同样的情况。与任何其他Web框架相比,asp.net mvc url没有什么不同。你想要的网址可能是这个:/Ticket/CheckForInstaller

但是,asp.net mvc框架可以为您提供帮助程序,这样您就不必对任何URL进行硬编码。你可以这样做:

<%=Url.Action("Ticket", "CheckForInstaller")%>

但唯一能做的就是找到指向该操作的相应url(“/ Ticket / CheckForInstaller”,具体取决于你的路由)并写出来。

答案 2 :(得分:1)

您可以使用$ .getJSON(url,[data],[callback(data)]),其中data是您返回的json数据对象。

或者您可以使用$ .post(url,[data],[callback(data)]),其中数据是您回溯的字符串/数据对象。

url:它是你的控制器/动作/脚本的相对URL,它返回json / data。

以上是jquery方法,如果你已经包含了jquery js文件,你就可以使用它。

答案 3 :(得分:1)

这是我最近一直在做的事情,而且一切正常。

  1. 获取根路径并将其存储在隐藏的输入中(替换[with&lt;)

    [input id =“urlBase”type =“hidden”value =“&lt;%= Url.Content(”〜“)%&gt;” /&GT;

  2. 获取该输入的值并将其存储在js中(在这种情况下使用jquery)

    _urlBase = $(“#urlBase”)。val();

  3. 使用该变量调用控制器

    $ .ajax({type:“GET”,url:_urlBase +“Controller / Action”,dataType:“json”});

答案 4 :(得分:0)

问题是控制器上的webMethod标签,在asp.net中是必需的或有用的,但不是在asp.net mvc中