asp.net-mvc – 如何提交本地jqgrid数据和表单输入元素
页面包含带有输入元素和jqgrid数据的单个表单.
使用loadonce:true选项在json中检索jqGrid数据. 数据在本地编辑. 如果按下提交按钮,如何提交所有这些数据? jqGrid可能在元素中保存检索到的json表.在这种情况下,表单插件无法读取此数据. 如何获取和提交使用loadonce检索的所有数据:true并编辑? UPDATE1 根据Oleg的回答,我试过: function SaveDocument() { var gridData = $("#grid").jqGrid('getGridParam','data'); var postData = JSON.stringify(gridData); $('#_detail').val( postData ); var res = $("#Form").serializeArray(); $.ajax({ type: "POST",url: 'Edit' data : res }); } } aspx页面: <form id="Form" class='form-fields'> .... other form fields <input name='_detail' id='_detail' type='hidden' /> </form> <div id="grid1container" style="width: 100%"> <table id="grid"> </table> </div> 在ASP.NET MVC2 Controller Edit方法中,我尝试使用解析结果 public JsonResult Edit(string _detail) { var order = new Order(); UpdateModel(order,new HtmlDecodeValueProviderFromLocalizedData(ControllerContext)); var serializer = new JavaScriptSerializer(); var details = serializer.Deserialize<List<OrderDetails>>>(_detail); } Deserialize()调用发生异常.十进制和日期属性以本地化格式传递,但看起来像Deserialize()不解析 怎么修 ? 更新2. 十进制和日期CurrentUICulture值以形式和jqGrid数据的形式出现.提供的示例以正确的形式处理它们但是jqGrid数据失败. public class LocalizedTypeConverter : JavaScriptConverter { public override IEnumerable<Type> SupportedTypes { get { return new ReadOnlyCollection<Type>(new Type[] { typeof(decimal) }); } } public override object Deserialize(IDictionary<string,object> dictionary,Type type,JavaScriptSerializer serializer) { if (dictionary == null) throw new ArgumentNullException("dictionary"); if (type == typeof(decimal)) return decimal.Parse(dictionary["resources"].ToString(),CultureInfo.CurrentCulture); return null; } public override IDictionary<string,object> Serialize(object obj,JavaScriptSerializer serializer) { throw new InvalidOperationException("We only Deserialize"); } } 但转换仍然会导致异常 0,0000不是十进制的有效值.看起来十进制转换器无法覆盖.怎么修 ? 解决方法
首先,您可以从jqGrid获取所有本地数据
var localGridData = $("#list").jqGrid('getGridParam','data'); 如果您只需要发送网格行的子集,就像仅选择行一样,则需要获取_index: var idsToDataIndex = $("#list").jqGrid('getGridParam','_index'); 要将数据发送到服务器,您可以使用以下功能 var sendData = function(data) { var dataToSend = JSON.stringify(data); alert("The following data are sending to the server:n" + dataToSend); $.ajax({ type: "POST",url: "yourServerUrl",dataType:"json",data: dataToSend,contentType: "application/json; charset=utf-8",success: function(response,textStatus,jqXHR) { // display an success message if needed alert("success"); },error: function(jqXHR,errorThrown) { // display an error message in any way alert("error"); } }); }; 在the demo中,您将找到一个更复杂的示例,其中包含两个按钮:“发送所有网格包含”,“发送所选行”.相应的代码如下 $("#sendAll").click(function(){ var localGridData = grid.jqGrid('getGridParam','data'); sendData(localGridData); }); $("#sendSelected").click(function(){ var localGridData = grid.jqGrid('getGridParam','data'),idsToDataIndex = grid.jqGrid('getGridParam','_index'),selRows = grid.jqGrid('getGridParam','selarrrow'),dataToSend = [],i,l=selRows.length; for (i=0; i<l; i++) { dataToSend.push(localGridData[idsToDataIndex[selRows[i]]]); } sendData(dataToSend); }); 哪里 var grid = $("#list"),decodeErrorMessage = function(jqXHR,errorThrown) { var html,errorInfo,errorText = textStatus + 'n<br />' + errorThrown; if (jqXHR.responseText.charAt(0) === '[') { try { errorInfo = $.parseJSON(jqXHR.responseText); errorText = ""; for (i=0; i<errorInfo.length; i++) { if (errorText.length !== 0) { errorText += "<hr/>"; } errorText += errorInfo[i].Source + ": " + errorInfo[i].Message; } } catch (e) { } } else { html = /<body.*?>([sS]*)</body>/i.exec(jqXHR.responseText); if (html !== null && html.length > 1) { errorText = html[1]; } } return errorText; },sendData = function(data) { var dataToSend = JSON.stringify(data); alert("The following data are sending to the server:n"+dataToSend); $.ajax({ type: "POST",jqXHR) { // remove error div if exist $('#' + grid[0].id + '_err').remove(); alert("success"); },errorThrown) { // remove error div if exist $('#' + grid[0].id + '_err').remove(); // insert div with the error description before the grid grid.closest('div.ui-jqgrid').before( '<div id="' + grid[0].id + '_err" style="max-width:' + grid[0].style.width + ';"><div class="ui-state-error ui-corner-all" style="padding:0.7em;float:left;"><span class="ui-icon ui-icon-alert" ' + 'style="float:left; margin-right: .3em;"></span><span style="clear:left">' + decodeErrorMessage(jqXHR,errorThrown) + '</span></div><div style="clear:left"/></div>'); } }); }; 我认为,您将在服务器上遇到更困难,更复杂的问题.在并发错误的情况下,但我之前写过关于这些问题的文章.正是因为我个人永远不会在服务器上实现多行保存的问题. 更新:要从表单中获取数据,您可以使用jQuery.serialize.您应该对要序列化的表单中的所有字段使用name属性.您需要发送的所有数据 var allData = { localGridData: grid.jqGrid('getGridParam',formData: $("#formid").serialize() }; 您可以像我之前描述的那样发送数据:sendData(allData). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 在ASP.NET中,什么决定了HostingEnvironment.IsDevelopmentE
- 在ASP.NET应用程序之间传递会话数据
- asp.net – System.Web.Security.AntiXss.AntiXssEncoder与
- asp.net-mvc – ASP.NET MVC – 处理没有返回对象的ajax操作
- asp.net-mvc – 仍然在存储库和解耦,ASP.NET MVC上丢失
- 在运行时设置ASP.NET母版页
- 诊断IIS 7和ASP.NET MVC上的404错误
- asp.net-core – 获取具有指定角色的用户
- asp.net – 用户控制静态名称选项?
- eShopOnWeb 知多少
- .net-4.0 – Asp.Net 4.0 CacheItemPolicy滑动到
- ASP.NET MVC 3应用程序中每个浏览器选项卡/窗口的
- 在ASP.NET中流文件的最佳方式
- [ASP.NET MVC] URL网址路由包含“/”斜线
- ASP.NET MVC从请求参数中删除双正斜杠
- asp.net – 如何在IIS7上全局设置enableVersionH
- asp.net-mvc – 单元测试适配器抛出异常:无法在
- asp.net – 如何从RouteData获取路由名称?
- asp.net-mvc – 使用Razor的Jquery模板如何在tex
- asp.net-mvc – 如何将ASP.net身份角色放入Ident