【发布时间】:2015-03-15 10:44:33
【问题描述】:
当在 url 中单独使用控制器名称查询 mvc 应用程序而不指定操作时,页面会呈现但 ajax/脚本不工作,而在 url 中使用操作查询时,同一页面按预期工作。
无效的 url:http://localhost:port/Search --> 页面渲染正常,但脚本无效 - 搜索结果未显示
工作网址:http://localhost:port/Search/Index --> 页面和脚本按预期工作 - 搜索结果正在显示
C#:
public class SearchController : Controller
{
private readonly List<string> _cars;
public SearchController()
{
_cars = new List<string>{"Corolla","Camry","Civic","Land Rover","Range Rover","Polo"};
}
public ActionResult Index()
{
return View();
}
public async Task<JsonResult> GetMatchingResults(string filter)
{
var results = await Task.Run(() => GetSearchResults(filter));
return new JsonResult() { Data = results,JsonRequestBehavior = JsonRequestBehavior.AllowGet };
}
private List<string> GetSearchResults(string filter)
{
var results = _cars.Where(car => car.Contains(filter));
return results.ToList();
}
}
HTML:
<html>
<head>
@using System.Web.Optimization
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/bootstrap")
<meta name="viewport" content="width=device-width" />
<script src="~/Scripts/ApplicationScripts/SearchViewJS.js" type="text/javascript"></script>
<title>SearchView</title>
</head>
<body>
<div>
<input class="searchText" type="search" />
</div>
<div>
<input class="searchResults" type="text" />
</div>
</body>
</html>
JS:
$(document).ready(function () {
$(".searchText").on('input', function (event) {
var filter = $(event.currentTarget).val();
search(filter).then(display);
});
function search(filter) {
return $.getJSON('GetMatchingResults/', { 'filter': filter });
}
function display(result) {
$(".searchResults").val(result);
}
})
【问题讨论】:
-
它必须是
$.getJSON('/Search/GetMatchingResults', ..(前导斜杠)。您应该始终使用'@Url.Action("GetMatchingResults", "YourControllerName")'来生成正确的网址 -
谢谢。使用 @Url.Action 修复
标签: javascript ajax asp.net-mvc url action