2011-09-22 116 views
0

我的问题是由于一些奇怪的原因,它似乎停留在页面控制器,所以不是走出去并进入ajax控制器,我试图沿着页面中的路线控制器在jQuery中调用错误的控制器问题ajax调用

1日试

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代码

1日试

{ 
    $.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控制器,就像我在使用第一次尝试解决方案时完成的所有其他项目中一样。

+0

什么是'callbackURL'?你的路由定义是怎样的? –

+1

你试过'$ .getJSON('/ Ajax/GetBlah /?lname ...)'吗? –

回答

1

看来你想在〜/ Ajax调用一个控制器。是吗?如果是的话,你应该使用这个代码:

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

UPDATE: 这将为您的问与答工作,但完整的解决方案是@达林季米特洛夫的答案。我建议你也使用它。

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 

问候

+0

那么这固定它,不知道这个“/”是如何去除的,但它不在我的另一个项目中,因此上帝知道那里发生了什么。我曾尝试过“〜/”,因为我在其他路线中使用它来摆脱一切。 – Myzifer

+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); 

甚至更​​好。

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

,然后在一个单独的JavaScript文件悄悄AJAXify它:一个将已经包含在它的href属性查询网址(这当然会通过URL辅助生成)更换您的硬编码锚

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

现在您的网址如何看起来完全取决于您如何在Application_Start方法中设置路线。您的意见和JavaScript现在完全不可知,如果您决定更改路线模式,则无需touch jaavscript或views。

+0

thx,我一定会尽快尝试这一点,因为我找到一个免费秒(试图让明天完成所有这些项目的开发,到目前为止,我不认为我是gona,但希望继承人) – Myzifer

+0

Only原因我无法直接调用GetBlah_Name,它现在在getBlah函数中进行3次检查,以确定哪些数据已被输入,然后根据提供的数据,它会更改它所做的ajax调用。例如,如果提供了一个Id号码,那么它就更加准确和具体,因此它将按照该号码进行搜索,而不是通过名称或其他并不总是有数据的Id字段进行搜索。 – Myzifer

+0

@Darin Dimitrov - 嗨,你能帮我解决这个问题吗? http://stackoverflow.com/questions/7508241/ef-4-1-code-first-how-to-load-related-data-parent-child-grandchild - 感谢您的任何想法和帮助 –