我有一个Html助手,它定义了一个用于提供jquery-ui自动完成的文本框。
@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 :(得分:3)
您不能在javascript文件中使用razor语法。您需要将代码移动到视图中,以便正确呈现。
可能的解决方案可能是这样的:
在您的视图中(例如.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);
}
});
}
});