MVC Post 参数“奇葩问题”

anbin0814 2014-08-26 10:18:00

//前端按钮点击事件
$("#btnSubmitRevcie").click(function () {
$.ajax({
type: "POST",
url: "/Operations/Recvice",
dataType: "json",
data: {
'usingId': 1, 'subId': 3, 'date': '2014/08/26 18:36:33',
'busData': [{ "id": 6, "amt": 12 }, { "id": 7, "amt": 17 }, { "id": 8, "amt": 32 }]
},
success: function (data) {
if (data.resultCode == 1) {
$("#submitRevcie").append("<div style='width:200px;'>生成成功,单据编号为:" + data.results + "</div>");
} else {
alert("生成收货单失败,原因可能是:" + data.otherCode);
}
}
})
});


//实体
public class ReceiveRequsetModel
{
public int usingId { get; set; }

public int subId { get; set; }

public string date { get; set; }

public List<InvoiceData> busData { get; set; }

public string sigpicUrl { get; set; }
}

public class InvoiceData
{
public int id { get; set; }

public int amt { get; set; }
}



//控制器
[HttpPost]
[HttpPost]
public ActionResult Recvice(ReceiveRequsetModel requset)
{
string dbUrl = "";
LoginResposeModel loginModel = null;
try
{
loginModel = Session["UserKey"] as LoginResposeModel;
dbUrl = Session["DbUrl"].ToString();
}
catch
{
var reslut = new { resultCode = 0, resultMsg = "失败", otherCode = "Session过期", results = "" };

return Json(reslut, JsonRequestBehavior.DenyGet);
}

if (requset.usingId == 0 || requset.subId == 0 || requset.date == "" || requset.busData.Count == 0)
{
var reslut = new { resultCode = 0, resultMsg = "失败", otherCode = "缺少参数,或者参数错误", results = "" };

return Json(reslut, JsonRequestBehavior.DenyGet);
}
}

控制器requset.usingId requset.subId requset.date 都可以取到相应的值,requset.busData的count是3,但是里面id和amt都是0,不知道为什么,有人知道这是什么问题吗?

...全文
590 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
宝_爸 2014-08-29
  • 打赏
  • 举报
回复
发送了测试工程
anbin0814 2014-08-28
  • 打赏
  • 举报
回复
引用 12 楼 findcaiyzh 的回复:
最后两个索引重复了。。 如果你需要我的测试工程,给我你的邮件,我发给你。
好的。344019932@qq.com
宝_爸 2014-08-28
  • 打赏
  • 举报
回复
最后两个索引重复了。。 如果你需要我的测试工程,给我你的邮件,我发给你。
宝_爸 2014-08-28
  • 打赏
  • 举报
回复
奇怪你的代码我试了下没有问题,做了些微小的修改 1. 新建一个MVC4工程,选择Internet application 2. 把你的实体类放到了AccountModeles.cs文件中,没有做任何修改 3. 把action放到了HomeController.cs中,删除了一些影响编译和运行的无关代码

        [HttpPost]
        public ActionResult Recvice(ReceiveRequsetModel requset)
        {
            string dbUrl = "";
            try
            {
                //dbUrl = Session["DbUrl"].ToString();
            }
            catch
            {
                var reslut = new { resultCode = 0, resultMsg = "失败", otherCode = "Session过期", results = "" };

                return Json(reslut, JsonRequestBehavior.DenyGet);
            }

            if (requset.usingId == 0 || requset.subId == 0 || requset.date == "" || requset.busData.Count == 0)
            {
                var reslut = new { resultCode = 0, resultMsg = "失败", otherCode = "缺少参数,或者参数错误", results = "" };

                return Json(reslut, JsonRequestBehavior.DenyGet);
            }

            return Json(dbUrl, JsonRequestBehavior.DenyGet); ;
        }

5修改Site.master,把引用jquery 放到前面

    <head runat="server">
        <meta charset="utf-8" />
        <title><asp:ContentPlaceHolder ID="TitleContent" runat="server" /></title>
        <link href="<%: Url.Content("~/favicon.ico") %>" rel="shortcut icon" type="image/x-icon" />
        <meta name="viewport" content="width=device-width" />
        <%: Styles.Render("~/Content/css") %>
        <%: Scripts.Render("~/bundles/modernizr") %>
        <%: Scripts.Render("~/bundles/jquery") %>
    </head>
把文件结尾部分的 <%: Scripts.Render("~/bundles/jquery") %> 删除 5. 把javascript放到view中,并加入一个button,做了点修改 * 把 $("#btnSubmitRevcie").click() 放到了$().ready()中 * 修改url为 url: "/home/Recvice", * 最后return false;

<asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server">
    
     <script type="text/javascript">
         $().ready(function () {
             $("#btnSubmitRevcie").click(function () {
                 $.ajax({
                     type: "POST",
                     url: "/home/Recvice",
                     dataType: "json",
                     data: {
                         'usingId': 1,
                         'subId': 3,
                         'date': '2014/08/26 18:36:33',
                         'busData': [{ "id": 6, "amt": 12 }, { "id": 7, "amt": 17 }, { "id": 8, "amt": 32 }]
                     },
                     success: function (data) {
                         if (data.resultCode == 1) {
                             $("#submitRevcie").append("<div style='width:200px;'>生成成功,单据编号为:" + data.results + "</div>");
                         } else {
                             alert("生成收货单失败,原因可能是:" + data.otherCode);
                         }
                     }
                 });

                 return false;
             });

         });


    </script>

    <form id="form1" runat="server">
    <h3>We suggest the following:</h3>
        
        <input type="button" id ="btnSubmitRevcie" value="submit"/>
    <ol class="round">

   ..................
真相重于对错 2014-08-27
  • 打赏
  • 举报
回复
或者不要用list<T>表示
真相重于对错 2014-08-27
  • 打赏
  • 举报
回复
试试 把 public class ReceiveRequsetModel 标记为可序列化
anbin0814 2014-08-27
  • 打赏
  • 举报
回复
引用 7 楼 qq175265664 的回复:
把 dataType: "json", 改成 dataType: "text",
还是一样的效果,其他的可以取到。busData Count也是对的,就是里面id amt一直为0。
qq175265664 2014-08-27
  • 打赏
  • 举报
回复
把 dataType: "json", 改成 dataType: "text",
anbin0814 2014-08-27
  • 打赏
  • 举报
回复
引用 4 楼 findcaiyzh 的回复:
Data整个是一个字符串吧,而且单引号和双引号好像混着用了。 试一试 data: { 'usingId': 1, 'subId': 3, 'date': '2014/08/26 18:36:33', 'busData': [{ "id": 6, "amt": 12 }, { "id": 7, "amt": 17 }, { "id": 8, "amt": 32 }] }, 改成 data: "{'usingId': '1', 'subId': '3', 'date': '2014/08/26 18:36:33','busData': [{ 'id': '6', 'amt': '12' }, { 'id': '7', 'amt': '17' }, { 'id': '8', 'amt': '32' }]}",
改了之后也不行。
宝_爸 2014-08-27
  • 打赏
  • 举报
回复
还有contentType是不是应该这样的: contentType: "application/json",
宝_爸 2014-08-27
  • 打赏
  • 举报
回复
Data整个是一个字符串吧,而且单引号和双引号好像混着用了。 试一试 data: { 'usingId': 1, 'subId': 3, 'date': '2014/08/26 18:36:33', 'busData': [{ "id": 6, "amt": 12 }, { "id": 7, "amt": 17 }, { "id": 8, "amt": 32 }] }, 改成 data: "{'usingId': '1', 'subId': '3', 'date': '2014/08/26 18:36:33','busData': [{ 'id': '6', 'amt': '12' }, { 'id': '7', 'amt': '17' }, { 'id': '8', 'amt': '32' }]}",
anbin0814 2014-08-26
  • 打赏
  • 举报
回复
引用 2 楼 caozhy 的回复:
换成单引号呢
单引号和不用引号都不行。
threenewbee 2014-08-26
  • 打赏
  • 举报
回复
换成单引号呢
anbin0814 2014-08-26
  • 打赏
  • 举报
回复
用Chrome看到的数据是有的。 this.Request.Params[0] "1" this.Request.Params[1] "3" this.Request.Params[2] "2014/08/26 18:36:33" this.Request.Params[3] "6" this.Request.Params[4] "12" 这样去取也是有的。不知道为什么不行了。 我之前在web Api里面都可以这样用。

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧