2017-07-28 161 views
1

我有一個Html助手,它定義了一個用於提供jquery-ui自動完成的文本框。Url.Action找不到控制器

@Html.TextBox("txtSearchArg") 

javascript位於/ Scripts文件夾中。

$("#txtSearchArg").autocomplete({ 
    source: function (request, response) { 
     var clinician = new Array(); 
     $.ajax({ 
      cache: false, 
      type: "POST", 
      url: '@(Url.Action("Autocomplete", "Home"))' 
      data: { "term": request.term }, 
      success: function (data) { 
       alert("in success"); 
       response(clinician); 
      }, 
      error: function (response) { 
       alert(response.responseText); 
      }, 
      failure: function (response) { 
       alert(response.responseText); 
      } 
     }); 
    } 
}); 

我使用@ Url.Action方法 在我的HomeController中,我有一個自動完成的方法。

[AcceptVerbs(HttpVerbs.Post)] 
    public JsonResult Autocomplete(string term) 
    { 
     ... JSON gets created here 
     return Json(result3, JsonRequestBehavior.AllowGet); 
    } 

當我傳遞一個url參數給我的$ .ajax方法,如上面的代碼,響應是404,沒有找到。在調試中,動態js顯示爲「url:'/ Home/Autocomplete'」。但是,當我通過它像這樣(複製形式動態JS):

url: '/Home/Autocomplete' 

它發現的HomeController自動完成的方法就好了。

如何使用Url.Action方法,以便找到HomeController和Autocomplete方法?

+0

你加[httpPost]? –

回答

2

您不能在JavaScript文件中使用剃鬚刀語法。您需要將代碼移到視圖中,以便正確渲染。

一個可能的解決辦法是這樣的:在你看來

(例如.cshtml文件):

<script> 
    var autoCompleteUrl = '@(Url.Action("Autocomplete", "Home"))'; 
</script> 
在你的js

然後只需更換:

$("#txtSearchArg").autocomplete({ 
    source: function (request, response) { 
     var clinician = new Array(); 
     $.ajax({ 
      cache: false, 
      type: "POST", 
      url: autoCompleteUrl 
      data: { "term": request.term }, 
      success: function (data) { 
       alert("in success"); 
       response(clinician); 
      }, 
      error: function (response) { 
       alert(response.responseText); 
      }, 
      failure: function (response) { 
       alert(response.responseText); 
      } 
     }); 
    } 
});