【问题标题】:ASP.Net MVC Scripts not working with controller's default action url. Same is working with controller/action urlASP.Net MVC 脚本不适用于控制器的默认操作 url。同样适用于控制器/操作网址
【发布时间】: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


【解决方案1】:

这是因为

的上下文
$.getJSON('GetMatchingResults/', { 'filter': filter });

在第一种情况下将尝试点击 /GetMatchingResults,第二次尝试点击 /search/GetMatchingResults。解决方法可能是使用

$.getJSON('/search/GetMatchingResults/', { 'filter': filter });

或者更好的是从 HTML 助手生成路径,如果您更新路由规则,该路径将正确路由。这看起来像

$.getJSON('@Url.Action("GetMatchingResults", "Search")', { 'filter': filter });

【讨论】:

    猜你喜欢
    • 2015-01-02
    • 2018-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-17
    • 2016-10-07
    • 1970-01-01
    • 2019-06-06
    相关资源
    最近更新 更多