【问题标题】:Posting request from javascript in AJAX to C# methods, no returning value, ASP.NET, MVC将 AJAX 中的 javascript 请求发布到 C# 方法,无返回值,ASP.NET,MVC
【发布时间】:2018-04-23 19:11:18
【问题描述】:

环境:

<package id="jQuery" version="3.2.1" targetFramework="net45" />
<package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net45" />

我尝试将来自我的一个 javascript 文件的请求发布到我在 C# 文件中的方法。到目前为止,请求返回 200 OK,但响应内容为空,使用console.log(response) 显示undefined。是我的请求 url 的问题还是我的 C# 函数不对?任何帮助或建议将不胜感激!

这是我的 Javascript:

<script>
    console.log("hello_List!")
    function getSearch() {
        console.log($("#query").val())
        console.log(typeof($("#query").val()))
        $.ajax({
            type: "POST",
            url: "./Search",
            data:  $("#query").val(),
            dataType: "json",
            success: OnSuccess,
            failure: function (response) {
                alert(response.d);
            }
        });
    }

    function OnSuccess(response) {
        alert("Success!");
        console.log(response);
    }
</script>

这是我的 C# 函数,它与我的 javascript 文件位于同一文件夹中:

    public class UsersController : Controller
    {
        [HttpPost]
            [System.Web.Services.WebMethod]
            public JsonResult Search(string query)
            {
                List<EntityModels.AspNetUser> users = new List<EntityModels.AspNetUser>();
                users = db.AspNetUsers.Where(x => x.Email.StartsWith(query)).ToList();
                List<SelectListItem> userObjs = new List<SelectListItem>();

                foreach (var user in users)
                {
                    var userObj = new SelectListItem
                    {
                        Value = user.Id.ToString(),
                        Text = user.Email
                    };

                    userObjs.Add(userObj);
                }

                return new JsonResult()
                {
                    Data = userObjs,
                    JsonRequestBehavior = System.Web.Mvc.JsonRequestBehavior.AllowGet
                };
            }
}

【问题讨论】:

  • data: $("#query").val(), 看起来不对
  • 谢谢,@epascarello,我试图通过函数传递一些静态字符串,比如 data: "ye" 但它仍然返回一个空字符串,所以我猜它是如何处理字符串出错的?
  • 你是调试服务器端代码还是查看网络面板返回的内容?
  • @Qiaofei 你在data 属性中传递什么?你能在这里举个例子吗?

标签: javascript c# asp.net ajax asp.net-mvc


【解决方案1】:

感谢您的帮助!我现在找到了解决方案,就是数据。 在这种情况下,不是简单地输入字符串,而是带有索引和值的 json。 于是我把data属性改成了:

data: { query: $("#query").val() },

这样就解决了问题

【讨论】:

  • 始终建议在数据属性之上使用JSON.stringify 方法以获得最佳结果。例如,您应该使用 JSON.stringify(data: { query: $("#query").val() }); 以获得更强大的方法。
【解决方案2】:
$.ajax({ type: "POST", 
 url: "./Search", 
data: $.("#query").val(), 
dataType: "json", 
success: function(response){
//your success method code    

到这里 } ,失败:功能(响应){警报(响应.d); } });

【讨论】:

  • 感谢您的回复!但是我尝试了您的代码,但它仍然返回一个空列表。我如何将参数传递给 C# 函数有什么问题吗?非常感谢!
猜你喜欢
  • 2020-01-24
  • 2011-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-15
  • 1970-01-01
  • 2020-03-16
  • 1970-01-01
相关资源
最近更新 更多