Url.Action找不到控制器
问题描述:
我有一个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方法?
答
您不能在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);
}
});
}
});
你加[httpPost]? –