【问题标题】:pass query results to ajax callback将查询结果传递给ajax回调
【发布时间】:2017-01-17 18:08:42
【问题描述】:

我正在进行实时搜索,用户在文本框中键入内容,然后通过 ajax 结果被提取并添加到 ul 中,在这种特定情况下,我正在寻找用户名,所以如果用户名是 johnny并且用户输入jo 然后johnny 应该出现等等。

我有 ajax js 代码、一个 post 方法和一个用户列表模型视图,我现在正试图返回列表但似乎不起作用。

我的js:

$("input#searchtext").keyup(function (e) {

    var searchVal = $("input#searchtext").val();

    var url = "/profile/LiveSearch";

    $.post(url, { searchVal: searchVal }, function (data) {
console.log(data);
    });

});

LiveSearch 视图模型

public class LiveSearchUserVM
    {
        public LiveSearchUserVM()
        {
        }

        public LiveSearchUserVM(UserDTO row)
        {
            FirstName = row.FirstName;
            LastName = row.LastName;
        }

        public string FirstName { get; set; }
        public string LastName { get; set; }
    }

post 方法

[HttpPost]
        public List<string[]> LiveSearch(string searchVal)
        {
            // Init db
            Db db = new Db();

            List<LiveSearchUserVM> usernames = db.Users.Where(x => x.Username.Contains(searchVal)).Select(x => new LiveSearchUserVM(x)).ToList();

            return usernames;
        }

所以基本上我想返回包含特定字符串的列列表(或其他内容),并将所有结果通过 ajax 回调传递给 javascript。

【问题讨论】:

  • 你可以使用成功回调和来自控制器的结果json结果
  • 查看我的回答,希望对您有所帮助
  • 您的操作在签名中返回 List ,但实际上您返回的是 List 。你的代码编译成功了吗?

标签: c# jquery ajax asp.net-mvc entity-framework


【解决方案1】:

要以 JSON 格式返回结果,请将您的方法更改为以下内容:

[HttpPost]
public JsonResult LiveSearch(string searchVal)
{
    // Init db
    Db db = new Db();

    List<LiveSearchUserVM> usernames = db.Users.Where(x => x.Username.Contains(searchVal)).Select(x => new LiveSearchUserVM(x)).ToList();

    return Json(usernames);
}

【讨论】:

    【解决方案2】:

    你可以这样使用。这个想法是使用成功函数

       $.ajax({
    url : ""/profile/LiveSearch"",
    type: "POST",
    data : searchVal ,
    success: function(data)
    {
        //data - response from server
    },
    error: function ()
    {
    
    }
    });
    

    并从 Post 方法返回 JsonResult

    【讨论】:

    • 所以我需要先将视图模型列表转换为 json 对吗?如果是这样,首先如何做到这一点?
    • 你也可以发送复杂的对象。对于您的情况,您有字符串,因此您也可以返回 JsonResult 。但是首先尝试这个来检查你是否从服务器得到响应下一步你可以看到如何发送列表/复杂对象
    • 我稍微编辑了我的 q,它在 post 方法中有错误的代码,结果我没有字符串而是视图模型列表。我确实得到了一个成功的回调,问题是如何读取该对象列表作为数据回调参数。
    • 这应该在您返回通用列表时自动为您完成。 .Net MVC 非常适合为您将复杂对象转换为 json。
    • 它不会自动发生,我必须事先转换它,但不知道如何。
    猜你喜欢
    • 1970-01-01
    • 2011-10-25
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多