在jquery ajax调用中调用错误的控制器的问题

时间:2011-09-22 07:54:34

标签: ajax asp.net-mvc-3

我的问题是出于一些奇怪的原因,它似乎停留在页面控制器中,所以不是走出去进入ajax控制器,而是让它试图在页面控制器中沿着那条路走下去

第一次尝试

http://localhost:2185/Alpha/Ajax/GetBlah_Name/?lname=Ge&fname=He

第二次尝试

http://localhost:2185/Patient/~/Ajax/GetBlah_Name/?lname=Ge&fname=He

目标

http://localhost:2185/Ajax/GetBlah_Name/?lname=Ge&fname=He

调用jquery的页面按钮

<a style="margin-left: 310px;" href="javascript:void(0)" onclick="getBlah()"
                    class="button"><span>Lookup</span></a>  

Jquery代码

第一次尝试

{
   $.getJSON(callbackURL + 'Ajax/GetBlah_Name/?lname=' + $('#Surname').val() + '&fname=' + $('#FirstName').val(), null, GetResults)
}

第二次尝试

{
   $.getJSON(callbackURL + '~/Ajax/GetBlah_Name/?lname=' + $('#Surname').val() + '&fname=' + $('#FirstName').val(), null, GetResults)
}

总之,我不知道为什么它不会突破控制器并进入Ajax控制器,就像它在使用第一个尝试解决方案时所做的所有其他项目中一样。

2 个答案:

答案 0 :(得分:1)

您的AJAX调用存在一些问题:

  • 你是硬编码路线
  • 您没有编码查询字符串参数

以下是我建议您改进代码的方法:

// Always use url helpers when dealing with urls in an ASP.NET MVC application
var url = '@Url.Action("GetBlah_Name", "Ajax")';

// Always make sure that your values are properly encoded by using the data hash.
var data = { lname: $('#Surname').val(), fname: $('#FirstName').val() };

$.getJSON(url, data, GetResults);

甚至更好。将硬编码锚点替换为已在其href属性中包含查找URL的锚点(当然这将由url帮助程序生成):

<a id="lookup" href="Url.Action("GetBlah_Name", "Ajax")" class="button">
    <span>Lookup</span>
</a> 

然后在一个单独的javascript文件中不引人注意地AJAX化它:

$(function() {
    $('#lookup').click(function() {
        var data = { lname: $('#Surname').val(), fname: $('#FirstName').val() };
        $.getJSON(this.href, data, GetResults);
        return false;
    });
});

现在,您的网址的外观将完全取决于您在Application_Start方法中设置路线的方式。您的观点和javascripts现在完全不可知,如果您决定更改路线模式,则无需触摸 jaavscript或观看。

答案 1 :(得分:1)

似乎你想在〜/ Ajax上调用一个控制器。是吗?如果是,您应该使用此代码:

   $.getJSON(callbackURL + '/Ajax/GetBlah_Name/?lname=' + $('#Surname').val() + '&fname=' + $('#FirstName').val(), null, GetResults)

<强>更新 这适用于您的Q,但完整的解决方案是@ Darin Dimitrov 的答案。我建议你也使用它。

<强> UPDATE2 ~是一个特殊的角色,只有ASP.NET可以使用它!所以http不理解它。如果你用url开始你的Ajax,那么url将从你现在的位置被引用(我的英语不好,我无法解释好) ,参见示例plz)。例如,你在这里:

http://localhost:2222/SomeController/SomeAction

在此页面中创建链接时,使用此href

href="Ajax/SomeAction"

将呈现为

http://localhost:2222/SomeController/Ajax/SomeAction

但是,当url/开头时,您将其引用到网站的根目录:

href="/Ajax/SomeAction"

将是:

http://localhost:2222/Ajax/SomeAction

此致