C# MVC和Ajax的内部服务器错误

C# MVC和Ajax的内部服务器错误,c#,asp.net,asp.net-mvc,asp.net-ajax,C#,Asp.net,Asp.net Mvc,Asp.net Ajax,我有一个ajax,用于自动完成文本框: $(function () { $("#txtSearch").autocomplete({ source: function (request, response) { var param = { movie_name: $('#txtSearch').val() }; $.ajax({ url: '/Home/GetMovieTitles',

我有一个ajax,用于自动完成文本框:

$(function () {
    $("#txtSearch").autocomplete({
        source: function (request, response) {
            var param = { movie_name: $('#txtSearch').val() };
            $.ajax({
                url: '/Home/GetMovieTitles',
                data: param,
                dataType: "json",
                type: "POST",
                contentType: "application/json; charset=utf-8",
                dataFilter: function (data) { return data; },
                success: function (data) {
                    response($.map(data.d, function (item) {
                        return {
                            value: item
                        }
                    }))
                },
                error: function (XMLHttpRequest, textStatus, errorThrown) {
                    alert(errorThrown);
                }
            });
        },
        minLength: 2
    });
});
web方法位于主控制器中

    [WebMethod]
    public List<String> GetMovieTitles(string movie_name)
    {
        MbdbContext db = new MbdbContext();

        List<string> MovieTitle = new List<string>();

        foreach (var item in db.Movies.Where(m => m.MovieName.Contains(movie_name)).ToList())
        {
            MovieTitle.Add(item.MovieName.ToString());
        }

        return MovieTitle;
    }
}
[WebMethod]
公共列表GetMovieTitles(字符串movie_name)
{
MbdbContext db=新的MbdbContext();
List MovieTitle=新列表();
foreach(db.Movies.Where(m=>m.MovieName.Contains(movie_name)).ToList()中的var项)
{
添加(item.MovieName.ToString());
}
归还电影;
}
}

我一直收到一个内部服务器错误。我有什么明显的遗漏吗?我应该在哪里查找?

从字符串列表到字符串列表的转换可能失败。尝试更改方法的返回类型

public List<String> GetMovieTitles ....
public List GetMovieTitles。。。。

公共列表获取电影字幕。。。

对于MVC应用程序中的Ajax调用,我使用返回类型JsonResult,而不是List,等等

由于您将内容返回为JSON

 contentType: "application/json; charset=utf-8"
您可能希望尝试这样构造web方法:

[HttpPost]
public JsonResult GetMovieTitles(string movie_name)
{
    MbdbContext db = new MbdbContext();

    List<string> MovieTitle = new List<string>();

    foreach (var item in db.Movies.Where(m => m.MovieName.Contains(movie_name)).ToList())
    {
        MovieTitle.Add(item.MovieName.ToString());
    }

    return Json(MovieTitle, JsonRequestBehavior.AllowGet);
}
[HttpPost]
public JsonResult GetMovieTitles(字符串movie_name)
{
MbdbContext db=新的MbdbContext();
List MovieTitle=新列表();
foreach(db.Movies.Where(m=>m.MovieName.Contains(movie_name)).ToList()中的var项)
{
添加(item.MovieName.ToString());
}
返回Json(MovieTitle,JsonRequestBehavior.AllowGet);
}

只是一个建议。

[WebMethod]
属性旨在公开XML Web服务方法(旧的ASP方式)

您不需要它,因为您使用的是MVC

[HttpPost] //since you using POST
public JsonResult GetMovieTitles(string movie_name)
{
    MbdbContext db = new MbdbContext();
    //also, it's better refactor to that way:
    List<string> MovieTitle = db.Movies
       .Where(m => m.MovieName.Contains(movie_name))
       .Select(x=>x.MovieName.ToString()).ToList()

    return Json(MovieTitle);
}
[HttpPost]//因为您使用了POST
public JsonResult GetMovieTitles(字符串movie_name)
{
MbdbContext db=新的MbdbContext();
//此外,最好以这种方式进行重构:
List MovieTitle=db.Movies
.Where(m=>m.MovieName.Contains(电影名称))
.Select(x=>x.MovieName.ToString()).ToList()
返回Json(电影字幕);
}

这样,您就不会在内存中迭代您的集合,只在DB中迭代。

您不需要在MVC中使用[WebMethod]

使用。

$.ajax({
url: '@Url.Action("GetMovieTitles")',
//Your Code.
})

它应该有一个异常详细信息,如果我在f12中查找到一些信息->我发现“加载资源失败”,则会显示“本地主机显示:内部服务器错误”。服务器响应状态为500。您真的在
MVC
中编码吗?为什么需要
WebMethod
?这是为ASPX Pagei编写的我是用MVC编写的,我之所以使用webmethod,是因为我以前做过一个web表单项目(老实说,我对它不太了解)@Steve一个MVC控制器可以返回你想要的任何内容,包括json。为什么会有一个类?100%确定字符串和字符串是可交换的是的,好的。我不知道。非常感谢。但是值得一试,字符串是字符串类型的对象。与此相同,int是一个Int32类型的对象。
$.ajax({
url: '@Url.Action("GetMovieTitles")',
//Your Code.
})