Ajax jquery发送空值到Mvc4控制器

Ajax jquery sending Null value to Mvc4 controller

本文关键字:Mvc4 控制器 空值 jquery Ajax      更新时间:2023-09-26

我有一个与ajax调用请求相关的问题,在堆栈溢出上搜索它,尝试了我得到的所有相关帮助,但无法解决问题。问题是我使用这段代码从我的视图请求一个控制器。

<script type="text/javascript">
    $(document).ready(function () {
        $('#contactDiv ').click(function() {
           var  number = $(this).find('.ContactNumber').text();
            var dataJson = {"contactNumber": number};
            $.ajax({
                type: "POST",
                url: "../contactWeb/messages",
               data: JSON.stringify(dataJson),
               //data: dataJson,
                 //contentType: "application/json",
                  contentType: "application/json",
                cache: false,
                success: function (msg) {
                    //msg for success and error.....
                    alert(msg);
                    return true;
                }
            });
        });
    });
</script>

,接收调用的控制器为

      [HttpPost]
        public JsonResult messages(string dataJson) 
        {
            Int64 userID = Convert.ToInt64(Session["userId"]);
            try
            {
                List<MessagesModel> messagesModel = new List<MessagesModel>();
                IMessages MessageObject = new MessagesBLO();
                messagesModel = MessageObject.GetAllMessagesWeb(userID , dataJson);
                //ViewData["Data"] = messagesModel;

            }
            catch (Exception e)
            {
            }
            //return View();
            string msg = "Error while Uploading....";
            return Json(msg, JsonRequestBehavior.AllowGet);
        } 

但是它传递NULL值给控制器

有几个问题需要修复

需要什么

JsonRequestBehavior.AllowGet

当您的action类型为post时。

如果您使用asp.net mvc4使用Url.Action指定url即

url:"@Url.Action("ActionName","ControllerName")"

现在谈论你的问题。

你的参数名必须匹配,将dataJson更改为contactNumber。虽然可以使用,但没有必要使用JSON.stringify,因为你传递的是单个字符串参数。

[HttpPost]
        public JsonResult messages(string contactNumber) 
        {
            Int64 userID = Convert.ToInt64(Session["userId"]);

嗨,你能改变你的参数的名称string dataJson在你的行动为contactNumber相对于你通过Ajax调用传递的对象

[HttpPost]
    public JsonResult messages(string contactNumber) //here
    {
        Int64 userID = Convert.ToInt64(Session["userId"]);
        try
        {
            List<MessagesModel> messagesModel = new List<MessagesModel>();
            IMessages MessageObject = new MessagesBLO();
            messagesModel = MessageObject.GetAllMessagesWeb(userID , contactNumber); //and here
            //ViewData["Data"] = messagesModel;

        }
        catch (Exception e)
        {
        }
        //return View();
        string msg = "Error while Uploading....";
        return Json(msg, JsonRequestBehavior.AllowGet);
    } 

如果你想在messages()中获取JSON,试试这个:

<script type="text/javascript">
    $(document).ready(function () {
        $('#contactDiv ').click(function() {
           var  number = $(this).find('.ContactNumber').text();
            var data = {"contactNumber": number};
            var dataJson = JSON.stringify(data);
            $.ajax({
                type: "POST",
                url: "../contactWeb/messages",
               dataType: 'text',
               data: "dataJson=" + dataJson,
               //data: dataJson,
                 //contentType: "application/json",
                cache: false,
                success: function (msg) {
                    //msg for success and error.....
                    alert(msg);
                    return true;
                }
            });
        });
    });
</script>