来自ajax的MVC3调用控制器方法

时间:2011-08-30 08:38:50

标签: asp.net asp.net-mvc-3

我有以下代码:

$.ajax({
    type: "GET",
    url: "/Search/GetNewData"  //Controller/ActionMethod
   ---snip---
)};

通过localhost运行时可以正常工作,但是在部署时,它无法找到控制器方法。我认为这可能是一个路由问题?但是,由于使用ASP.net的知识很少,我将不胜感激。

感谢。

3 个答案:

答案 0 :(得分:3)

您真的不想直接在JavaScript中指定网址。

需要使用帮助者;否则,如果您更改路线,则必须重写JavaScript代码中的所有URL。此外,如果您的网站托管在IIS虚拟目录中(这似乎是问题),它将无法工作。

这里有几个解决方案,如果您的JavaScript代码嵌入在视图中,只需使用

$.ajax({
    type: 'GET',
    url: '@Url.Action("GetNewData", "Search")'
)};

如果它位于外部JavaScript文件中,您可以使用HTML5 data-*属性来共享JavaScript代码的URL。

例如:

<div id="foo" data-update-url="@Url.Action("GetNewData", "Search")">
</div>

然后JavaScript代码就像

var updateDiv = $('#foo');
$.ajax({
    type: 'GET',
    url: updateDiv.data('update-url'),
    success: function(data) {
       updateDiv.append(data);
    }
)};

答案 1 :(得分:2)

以下代码段适用于虚拟目录和网站。

var baseUri = '@Url.Content("~/")';
$.ajax({
    type: "GET",
    url: baseUri + "Search/GetNewData"  //Controller/ActionMethod
   ---snip---
)};

您还可以在布局中定义baseUri变量(在所有<script标记之上),以便能够在所有包含的javascripts中使用它。

答案 2 :(得分:0)

为FireFox安装FireBug。打开.NET面板和控制台面板。请求URL以查看是否有任何错误。如果没有找到,那么学会使用调试器。这绝不是一个快速解决方案,但它将帮助您将来自己解决这些问题。祝你好运。