【问题标题】:jquery getJson not passing any values to controllerjquery getJson没有将任何值传递给控制器
【发布时间】:2010-10-06 21:10:51
【问题描述】:

我正在尝试将一些文本从文本框传递到控制器以获得 JSON 结果,如下所示

function invokeAction() {
        var searchText = $("#SearchTextBox").val();

        // Invoke MVC controller action
        $.getJSON("/Home/Results/" + searchText, bindResults);
    }

如果我在这里放一个警报,我可以看到 searchText 肯定有一个值,但是当我在这个控制器动作上放一个断点时:

 public ActionResult Results(string search)
    {
        var r = from t in db.Restaurants
                where SqlMethods.Like(t.Name, "%" + search + "%") || SqlMethods.Like(t.Postcode, search + "%") || SqlMethods.Like(t.CuisineType.Type, search + "%")
                orderby t.Name ascending
                orderby t.Rating descending
                orderby t.NumOfViews
                    descending
                select t;

        return Json(r.ToList());
    }

传入的字符串为空,但是当我在调试器中检查 http 上下文时,我的搜索文本是 url 的一部分。

因为这是 null,所以查询不返回任何结果。

我错过了什么吗?

【问题讨论】:

    标签: asp.net jquery asp.net-mvc json


    【解决方案1】:

    我在从服务返回 json 时遇到了一些问题,但我没有收到任何回电。结果发现 json 格式不正确,我能够通过处理普通 ajax 调用的错误选项来测试并得到这些错误。

    $.ajax({
      type: "GET",
      url: "Home/Results/",
      data: { search: searchText },
      dataType: "json",
      error: function(xhr, status, error) {
        // you may need to handle me if the json is invalid
        // this is the ajax object
      },
      success: function(json){
        alert( "Data Returned: " + json);
      }
    });
    

    【讨论】:

    • 谢谢,我使用了它并捕获了一个错误。我还使用了萤火虫,它告诉我我有一个循环引用。我想我需要整理一下我的数据库。
    • 酷,我很高兴,所以我得到答案了吗?
    • 是的,本德威,你可以得到答案;)
    【解决方案2】:

    您必须修复您的路线并将 {id} 替换为 {search} 以使其绑定到正确的参数 - 尝试如下操作:

    routes.MapRoute("search", "Home/Results/{search}", 
      new { controller = "Home", action = "Results" });
    

    如果你不想这样做,你可以通过将参数名指定为标准查询字符串参数来这样做

    $.getJSON("/Home/Results?search=" + searchText,bindresults);
    

    这将修复绑定。

    【讨论】:

    • 我已经改了 t0 $.getJSON("/Home/Results/", { search: searchText }, function(data) { alert("g"); movieView.set_data(data); });警报框用于调试的位置。问题是它永远达不到。如果我在控制器上设置断点,它会返回 JSON 结果。有什么想法吗?
    • 实际上它确实调用了该函数,但前提是控制器没有返回任何结果。我不认为当我打算调用设置数据时。我需要清除旧数据吗?
    • 尝试基本的 return Json(new{result="hello"});看看是否可行
    猜你喜欢
    • 2023-03-29
    • 2014-05-21
    • 2012-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-30
    • 1970-01-01
    相关资源
    最近更新 更多