Jquery 控制器中的参数在asp.net mvc中给出空值异常

Jquery 控制器中的参数在asp.net mvc中给出空值异常,jquery,asp.net,ajax,asp.net-mvc,asp.net-core,Jquery,Asp.net,Ajax,Asp.net Mvc,Asp.net Core,我正在使用jquery和ajax制作一个带有下拉菜单的文本框,用于自动完成建议,但我通过调试发现的错误是,当调试点指向给定代码时,它成功地移动到返回语句,当同一语句第二次出现时,它会给出一个异常,即关键字为null关键字为字母表由用户在文本框中输入 var result = (from a in objGameList where a.GameName.ToLower().StartsWith(keyword.ToLower()) select new { a.GameName }); 代码

我正在使用jquery和ajax制作一个带有下拉菜单的文本框,用于自动完成建议,但我通过调试发现的错误是,当调试点指向给定代码时,它成功地移动到返回语句,当同一语句第二次出现时,它会给出一个异常,即关键字为null关键字为字母表由用户在文本框中输入

var result = (from a in objGameList where
a.GameName.ToLower().StartsWith(keyword.ToLower()) 
select new { a.GameName });
代码如下:

Index.cs

控制器

提前谢谢

dataType: "json",
data: { keyword: request.term },
您正在以JSON格式发送数据,如下所示。这意味着有一个带有关键字属性的对象被发送到服务器

将JSON对象发送到服务器时,应始终创建一个自定义复杂对象,以便ASP.NET Core正确地对其进行反序列化:

public class AutoCompleteViewModel
{
    public string Keyword { get; set; }
}

所以我从头开始做了一个例子,看看它是否有效,然后。。。它起作用了,所以请按照这个例子,试着找出你的方法有什么不同。我将指出与您提供的代码片段相比我所做的每一个更改

我将从新的空项目开始

dotnet new mvc -o test
我将您的整个POST操作复制并粘贴到HomeController.cs中,修复导入并生成丢失的游戏模型,将该文件放入。\Models\Games.cs:

我用您的视图替换了./Views/Home/Index.cshtml的内容,并在文件顶部添加了一行:@Model Games以让视图了解模型,以便@Html.EditorFor能够生成表单控件-如果没有它,我会遇到一个错误:CS1963表达式树可能不包含动态操作:

因此:

并删除对任何其他js文件的引用:

...
    </footer>
</body>
</html>
在那个阶段,我没有遇到你所描述的任何事情。虽然我得到了一个错误:uncaughttypeerror:this.options.messages.results不是一个函数,但这是完全不同的,可以通过替换

    messages: {
        noResults: "", results: ""
    }
});
为此:

    messages: {
        noResults: "", results : function(count) {
        return "";
      }
    }
});
该解决方案不存在任何错误和工作机制


请玩玩它,它肯定会有用的。我能想到的只是不同的库版本。

无法用提供的代码复制它。当第二次出现在同一句话上时,你的确切意思是什么?它第二次击中控制器内部的断点而不调用AJAX?或者您键入并删除一封信,强制autocomplete发送相同的请求,而第二封信没有任何数据?您使用的是哪个版本的jQuery和jQuery UI?我使用jQuery 1.12.4和UI 1.12.1进行了复制,没有结果。您的视图中没有模型定义。。。以下内容无效:@Html.EditorFormodel=>model。GameName@HoomanBahreini显示的控制器操作与正在显示的视图代码不对应。控制器操作通过AJAX调用并返回JSON。@Eatos当我在文本框中输入文本,调试点到达控制器中的函数时,它将第一次成功返回STATTION,当回发到给定语句时,它会给出提到的错误抱歉,如果我理解正确:类型C,controler returns,类型r,控制器返回,删除r,控制器抛出错误?图书馆的哪个版本?无论您键入的文本是否匹配,都会发生这种情况?对于我尝试过的版本,如果立即从Cr返回到C,则API仅被调用1次,而不是3次,它检测到值没有从C更改。也许您的版本工作方式不同?非常感谢您的好意@Eatos。成功了。
namespace test.Models
{
    public class Games // changed the default visibility to public
    {
        public int Id { get; set; }
        public string GameName { get; set; }
    }
}
@model Games
<script type="text/javascript">
...
<!DOCTYPE html>
<html lang="en">
<head>
    <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
    <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
</head>
<body>
...
...
    </footer>
</body>
</html>
public IActionResult Index()
{
  return View(new Games()); // added new Games object to be injected as a model for the view.
}
    messages: {
        noResults: "", results: ""
    }
});
    messages: {
        noResults: "", results : function(count) {
        return "";
      }
    }
});