【问题标题】:Ajax Json Data null at Controller控制器上的 Ajax Json 数据为空
【发布时间】:2014-04-28 18:41:38
【问题描述】:

我正在我的控制器中捕捉帖子,但 String formData 为空。因此,我也无法使用防伪属性,因为似乎所有数据都丢失了。也许我不应该使用serialzeArray

我的帖子:

    $("#SetCommunicationSettingsForm").submit(function (e) {
            debugger;
            var postData = $(this).serializeArray();
            var formURL = $(this).attr("action");
            $.ajax(
            {
                url: formURL,
                type: "POST",
                datatype:"json",
                data: postData,
                success: function (data) {
                    debugger;
                    //data: return data from server
                    if (data.success == true) {
                        $("#SaveSuccessful").show();
                        $("#SetCommunicationSettingsFormArea").hide();
                        $("#SumbitCommunicationSettingForm").val('<%: ServiceSite.Resources.Resources.COMMON_CLOSE %>');
                        $("#SumbitCommunicationSettingForm").unbind('click');
                        $("#SumbitCommunicationSettingForm").click(closeCommunicationSettingPopup);
                        $("#CancelCommuncationSettingButton").hide();
                    }
                    else {
                        $("#DeviceCommuncationSettingLocation").html(data);
                    }
                }
            });
            e.preventDefault(); //STOP default action
        });

我的控制器:

  [HttpPost]
    //[AuthorizeActionFilter]
    //[ValidateAntiForgeryToken (Salt= "UpdateCommunicationSettings")]
    public ActionResult UpdateCommunicationSettings(String formData)
    {
        //Decode parameters 
        JavaScriptSerializer ser = new JavaScriptSerializer();
        Dictionary<String, Object> jsonParams = ser.Deserialize<Dictionary<String, Object>>(formData);

        //verify permissions on server side
        if (((List<string>)Session["AuthorizedActions"]).Contains("EditDeviceCommunicationSettings"))
        {
            // Build DeviceData.DeviceConfigurationSettings from model, pass to DAL to Save
            List<long> deviceIds = GetSelectedDevicesFromSession();

            foreach (long id in deviceIds)
            {

            }

            return PartialView("DeviceCommunicationSettingDialog");
        }
        else
        {
            return Json(new { notAuthorized = true });
        }
    }

【问题讨论】:

    标签: jquery ajax json asp.net-mvc-3


    【解决方案1】:

    您发布的是 json 对象,而不是字符串。
    因此,您可以在技术上将 json 转换为字符串:

    var jsonStr = JSON.stringify(json);
    

    不要这样做,而是尝试使用 FormCollection:

    public ActionResult UpdateCommunicationSettings(FormCollection formData)
    {
    }
    

    您需要删除序列化。

    附:您可以使用与客户端上的 json 具有相同架构的类,它将处理绑定。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-22
      • 2021-10-08
      • 1970-01-01
      • 2014-07-31
      相关资源
      最近更新 更多