【问题标题】:MVC Ajax Post errorMVC Ajax 发布错误
【发布时间】:2015-03-23 06:21:13
【问题描述】:

我在向控制器方法发布 Ajax 请求时遇到错误。在控制器方法中,我需要传递 Model 类对象。 但它给了我 500 内部服务器错误。 谁能帮我改正?

Mu代码如下:

jQuery:

 var request = $("#frmHost").serialize();


$.ajax({
        url: "/Host/HostItemDetails/" ,
        type: "POST",
        datatype: 'json',
        contentType : "application/json",
        data: request,
        success: function (data) {
            if (data == '1111') {
                  ///Success code here
            }
            else if (data != '') {
                jAlert(data);
            }
        }
    });

Controller Method :
[HttpPost]
public JsonResult HostItemDetails(ClsHost objHost)
{
     //Code here
 return Json("1111");
}

【问题讨论】:

  • 您的代码看起来非常好。你能分享更多细节吗?
  • 是的,当然。当我运行它时,它不会调用控制器方法..并给出“NetworkError:500 Internal Server Error - localhost:1004/Host/HostItemDetails”并且代码没有被执行。
  • 我可以要求在控制器方法上添加任何属性吗?意思是像 [HTTPPost]?

标签: ajax model-view-controller


【解决方案1】:

Nirav 试试这个,

将序列化数据解析为 JSON 对象,然后在使用 JSON.stringify() 发布时对其进行字符串化。

$("#Button").click(function () {
       var data = $("#frmHost").serialize().split("&");
       var request = {};
       for (var key in data) {
            request[data[key].split("=")[0]] = data[key].split("=")[1];
       }

       $.ajax({
            url: "/Home/HostItemDetails/",
            type: "POST",
            datatype: 'json',
            contentType: "application/json",
            data: JSON.stringify(request),
            success: function (data) {
               if (data == '1111') {
                  ///Success code here
               }
               else if (data != '') {
                  jAlert(data);
               }
            }
      });
  });

【讨论】:

  • 它很有用,因为我正在以如下格式获取响应数据名称“test”name1“test2”这样。但仍然是相同的 500 内部服务器错误。
  • 你能告诉我模型 ClsHost 的样子吗?
  • 它看起来像 public partial class ClsHost : IClsHost { #region "Property Of Host Item Details" public long lgHostItemDetailsId { get;放; } 公共长 lgHostId { 获取;放; } 公共长 lgItemId { 得到;放; } 公共字符串 strItemName { 获取;放; } public List listHostItemDetails { get;放; } 公共小数? dcCostPerWeek { 得到;放; } 公共字符串 strComment { 获取;放; } #endregion }
  • 根据您的模型,您必须构建 JSON 对象而不是序列化表单。 JSON 必须包含一个 Json 数组作为 listHostItemDetails 参数的值。 json 应该是这种格式。在发布时将其字符串化。 var data = { "lgHostId":value_Of_lgHostID, "lgItemId": value_Of_lgItemId, "strItemName": value_of_strItemName, "listHostItemDetails": [ { "lgHostId": value_Of_lgHostID, "lgItemId": value_Of_lgItemId, "strItemName": value_of_strItemName }, { "lgHostId ": value_Of_lgHostID, "lgItemId": value_Of_lgItemId, "strItemName": value_of_strItemName } ] }
  • 您好 Vinod,感谢您对此的回答。我通过删除模型类中的属性名称来解决它。它被我错误地添加了两次。但非常感谢您与我分享想法和知识。
【解决方案2】:

我运行了您正在运行的相同代码。 为了测试代码,我做了以下更改。我拿了一个按钮,然后在单击事件时将帖子发送回控制器。 '[HttpPost]' 属性也很好。

你能确定一件事,frmHost 数据与 ClsHost 类匹配,但这不应该导致服务器错误,错误会有所不同。

$(document).ready(function () {
    $("#clickMe").click(function () {
        var request = '{"Users":[{"Name":"user999","Value":"test"},{"Name":"test2","Value":"test"}]}';
        $.ajax({
            url: "/Home/HostItemDetails/",
            type: "POST",
            datatype: 'json',
            contentType: "application/json",
            data: request,
            success: function (data) {
                if (data == '1111') {
                    ///Success code here
                }
                else if (data != '') {
                    jAlert(data);
                }
            }
        });
    });

});

控制器:

[HttpPost]
[ValidateAntiForgeryToken]
public JsonResult HostItemDetails(ClsHost objHost)
{
    //Code here
    return Json("111", JsonRequestBehavior.AllowGet);   
}

【讨论】:

  • 好的,让我再检查一次。谢谢。
  • 我检查了 frmHost 数据是否与 ClsHost 类匹配。但我认为错误的到来是不同的。有没有其他解决办法?
  • 尝试在您的控制器上添加“[ValidateAntiForgeryToken]”并返回“JsonRequestBehavior.AllowGet”参数
  • 在Controller方法上下断点,你在objHost中得到了什么??你设置了 JsonRequestBehavoiur.AllowGet 吗??
  • 把你建议的东西放好后,控制器方法不会被调用。另外我想知道你在 jquery 中发布请求,请求数据字符串就像
【解决方案3】:

通过删除模型类中相同的属性名称来解决。被我加错了两次。

【讨论】:

    猜你喜欢
    • 2018-11-03
    • 2020-11-15
    • 2012-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-26
    • 1970-01-01
    • 2011-05-21
    相关资源
    最近更新 更多