MVC 提交复杂型Model(主从表:包含List对象)

dingwei 2015-06-24 08:53:23
前台通过JQuery构造了多条字表数据,然后通过修改每行数据中控件的name属性来提交List对象到后台,前台html加载List对象的代码片段如下,这么提交在谷歌浏览器下是没问题的,但是在ie下通过jQuery增加的行却不能提交到后台,大牛们可以解释一下吗?
<tr class="sub-list-data">
<td align="center">
<input type="checkbox" value="<%=Model.SubDataList[i].ID %>" name="Check_ID" />
</td>
<td align="center">
<%=Html.TextBox("SubDataList[" + i + "].OrderNO", Model.SubDataList[i].OrderNO, new { @size = "16", @class = "validate[required]" })%>
</td>
<td align="center">
<%=Html.TextBox("SubDataList[" + i + "].ItemName", Model.SubDataList[i].ItemName, new { @size = "8" , @class = "validate[required]" })%>
</td>
<td align="center">
<%=Html.TextBox("SubDataList[" + i + "].ItemVariety", Model.SubDataList[i].ItemVariety, new { @size = "8" , @class = "validate[required]" })%>
</td>
<td align="center">
<%=Html.TextBox("SubDataList[" + i + "].ItemSpec", Model.SubDataList[i].ItemSpec, new { @size = "8", @class = "validate[required]" })%>
</td>
<td align="center">
<%=Html.TextBox("SubDataList[" + i + "].StoveNO", Model.SubDataList[i].StoveNO, new { @size = "16", @class = "validate[required]" })%>
</td>
<td align="center">
<%=Html.TextBox("SubDataList[" + i + "].InQty", Model.SubDataList[i].InQty, new { @size = "8", @class = "validate[required,custom[number]]" })%>
</td>
<td align="center">
<%=Html.TextBox("SubDataList[" + i + "].Price", Model.SubDataList[i].Price, new { @size = "8", @class = "validate[required,custom[number]]" })%>
</td>
<td align="center">
<%=Html.TextBox("SubDataList[" + i + "].Remark", Model.SubDataList[i].Remark, new { @size = "45" })%>
</td>
<td align="center">
<%=Html.TextBox("SubDataList[" + i + "].BarCode", Model.SubDataList[i].BarCode, new { @size = "12", @class = "validate[required]" })%>
</td>
</tr>
...全文
852 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
changuncle 2016-12-15
  • 打赏
  • 举报
回复
谢谢楼主的提示,我也遇到了这个问题,借鉴一下楼主的思路试试。
dingwei 2015-06-27
  • 打赏
  • 举报
回复
感谢各位的回复,我主要是想在前台组织好数据,然后一起提交到后台。给用户的感觉就像是桌面程序一样。 因为,想仓储管理类的软件,界面上肯定会有很多列表数据的提交,如果列表要是一条条提交到后台的话肯定很麻烦,所以才在前台用js动态添加或删除行,最后点击“保存”按钮来提交; 现在已经解决了,用的是以前的方案:拼接Json字符串,将Json字符串提交到后台,让后台来反序列化; 示例代码如下:
function jsonToText() {
            JsonText = "[";
            var recordList = $(".sub-list-data");
            recordList.each(function (i, tr) {
                JsonText += '{';
                JsonText += '"ID":' + '"' + $(tr).find("input[name$='ID']").val() + '",';
                JsonText += '"MainID":' + '"' + $(tr).find("input[name$='MainID']").val() + '",';
                JsonText += '"OrderNO":' + '"' + $(tr).find("input[name$='OrderNO']").val() + '",';
                JsonText += '"ItemName":' + '"' + $(tr).find("input[name$='ItemName']").val() + '",';
                JsonText += '"ItemVariety":' + '"' + $(tr).find("input[name$='ItemVariety']").val() + '",';
                JsonText += '"ItemSpec":' + '"' + $(tr).find("input[name$='ItemSpec']").val() + '",';
                JsonText += '"StoveNO":' + '"' + $(tr).find("input[name$='StoveNO']").val() + '",';
                JsonText += '"InQty":' + '"' + $(tr).find("input[name$='InQty']").val() + '",';
                JsonText += '"Price":' + '"' + $(tr).find("input[name$='Price']").val() + '",';
                JsonText += '"Remark":' + '"' + $(tr).find("input[name$='Remark']").val() + '",';
                JsonText += '"BarCode":' + '"' + $(tr).find("input[name$='BarCode']").val() + '"},';
            });
            JsonText = JsonText.substring(0, JsonText.length - 1);
            JsonText += "]";
            $("#SubDataListText").val(JsonText);
        }
后台反序列化:
 public static List<T> Deserialize<T>(string text)
        {
            try
            {
                JavaScriptSerializer js = new JavaScriptSerializer();
                List<T> list = (List<T>)js.Deserialize(text, typeof(List<T>));
                return list;

            }
            catch (Exception e)
            {
                var logger = new TxtLogger();
                logger.Write("JsonHelper", e);
                return null;
            }
        }
shangdf88 2015-06-26
  • 打赏
  • 举报
回复
我觉得是不是不想用EF? 如果是CodeFirst的话,是要先有代码的,再有数据库 现在已经有库的,不知道能不能按照库的结构把codefirst代码敲出来?不过,不太建议那样做 楼主看一下能不能用edmx来,拖拽实现,生成的实体代码的增删改查与codefirst是差不多的
  • 打赏
  • 举报
回复
就一个加载部分代码,看不到你submit时的数据包,无法判断问题
李贵发 2015-06-25
  • 打赏
  • 举报
回复
顶一个顶一个
dingwei 2015-06-25
  • 打赏
  • 举报
回复
后台的Model对象如下: [code=csharp]public string ID { get; set; } public int InStoreType { get; set; } public string InStoreDate { get; set; } public int UserID { get; set; } public int PCount { get; set; } public float SumQty { get; set; } public float Amount { get; set; } public string Remark { get; set; } public List<ProductInStoreSubForm> SubDataList { get; set; }[/code]
insus 2015-06-25
  • 打赏
  • 举报
回复
做成一个对象,传对象即可。 http://www.cnblogs.com/insus/p/3731135.html
Ohyes陈陈 2015-06-24
  • 打赏
  • 举报
回复
顶一个顶一个顶一个顶一个顶一个顶一个

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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