如何解决:System.Web.HttpException: URL 编码窗体数据无效 的问题

wsbgy 2012-02-17 03:51:09
在为用户指定权限的操作此出现此错误!
用户权限为两个Repeater嵌套,在提交数据时,循环这两个Repeater。每读出一行,就写入数据库,然后关闭数据库。如果数量少的话,不会出现此问题,当数据库较大此,就会出现此问题。请问如何解决?

错误信息:
客户机IP:127.0.0.1,错误地址:http://127.0.0.1:1009/admin/UserEdit.aspx?MenuID=5&ID=1,异常信息:引发类型为“System.Web.HttpUnhandledException”的异常。

--------------------------------------------------------------------------------
System.Web.HttpUnhandledException: 引发类型为“System.Web.HttpUnhandledException”的异常。 ---> System.Web.HttpException: URL 编码窗体数据无效。 ---> System.InvalidOperationException: 对象的当前状态使该操作无效。 在 System.Web.HttpValueCollection.ThrowIfMaxHttpCollectionKeysExceeded() 在 System.Web.HttpValueCollection.FillFromEncodedBytes(Byte[] bytes, Encoding encoding) 在 System.Web.HttpRequest.FillInFormCollection() --- 内部异常堆栈跟踪的结尾 --- (后面省略)


ASP.Net代码:

<asp:Repeater ID="repeate_Menu" runat="server" onitemdatabound="repeate_Menu_ItemDataBound">
<ItemTemplate>
<div class="RoleByMenu">
<asp:HiddenField ID="hidden_MenuID" runat="server" Value='<%#Eval("ID") %>' />
<asp:HiddenField ID="hidden_ModuleID" runat="server" Value='<%#Eval("ModuleID") %>' />
<div style="width:100px;float:left">
<asp:CheckBox ID="cb_MenuID" runat="server" Text='<%#Eval("MenuName") %>' />
</div>
<div style="width:auto;float:left">
<asp:Repeater ID="repeater_Action" runat="server" onitemdatabound="repeater_Action_ItemDataBound">
<ItemTemplate>
<div style="width:auto;float:left;margin-right:10px;font-weight:normal">
<asp:HiddenField ID="hidden_ActionCode" runat="server" Value='<%#Eval("ActionCode") %>' />
<asp:HiddenField ID="hidden_ActionID" runat="server" Value='<%#Eval("ID") %>' />
<asp:HiddenField ID="hidden_AdminUrl" runat="server" Value='<%#Eval("AdminUrl") %>' />
<asp:CheckBox ID="cb_Action" runat="server" Text='<%#Eval("ActionName") %>' /></div>
</ItemTemplate>
</asp:Repeater>
</div>
</div>
</ItemTemplate>
</asp:Repeater>


C#代码
private void SaveOrUpdateUserAction(int intUserID)
{
try
{
foreach (RepeaterItem item in repeate_Menu.Items)
{
if (item.ItemType == ListItemType.AlternatingItem || item.ItemType == ListItemType.Item)
{
int menuID = int.Parse(((HiddenField)item.FindControl("hidden_MenuID")).Value);
//string menuCode = ((HiddenField)item.FindControl("hidden_MenuCode")).Value;

//第一层Repeater:菜单
CheckBox cb_MenuID = (CheckBox)item.FindControl("cb_MenuID");
M_UsersAction model = new M_UsersAction();
model.UserID = intUserID;
model.MenuID = menuID;
model.IsValid = cb_MenuID.Checked;
//Response.Write(string.Format("UserID:{0}    MenuID:{1}    MenuCode:{2}    IsValid:{3}<br>", intUserID, menuID.ToString(), menuCode, IsValid.ToString()));
BLLFactory.GetUserActionBLL().SaveOrUpdate(model);

//第二层Repeater:动作
Repeater repeater_Action = (Repeater)item.FindControl("repeater_Action");
foreach (RepeaterItem itemByAction in repeater_Action.Items)
{
if (itemByAction.ItemType == ListItemType.AlternatingItem || itemByAction.ItemType == ListItemType.Item)
{
CheckBox cb_Action = (CheckBox)itemByAction.FindControl("cb_Action");
HiddenField hidden_ActionCode = (HiddenField)itemByAction.FindControl("hidden_ActionCode");
HiddenField hidden_ActionID = (HiddenField)itemByAction.FindControl("hidden_ActionID");
HiddenField hidden_AdminUrl = (HiddenField)itemByAction.FindControl("hidden_AdminUrl");

M_UsersAction modelByUser = new M_UsersAction();
modelByUser.ActionCode = hidden_ActionCode.Value;
modelByUser.ActionID = int.Parse(hidden_ActionID.Value);
modelByUser.AdminUrl = hidden_AdminUrl.Value;
modelByUser.IsValid = cb_Action.Checked;
modelByUser.MenuID = menuID;
modelByUser.UserID = intUserID;
BLLFactory.GetUserActionBLL().SaveOrUpdate(modelByUser);
}
}
}
}
}
catch (SqlException ex)
{
System.Log.LogHelper.WriteError(ex.Message, ex);
}
}
...全文
1142 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
孟子E章 2012-02-17
  • 打赏
  • 举报
回复
你提交的表单数据太多了,你可以
1,更新到最新的系统补丁和.net补丁
2,可以在web.config里面写
<appSettings>
<add key="aspnet:MaxHttpCollectionKeys" value="5000" />
<add key="aspnet:MaxJsonDeserializerMembers" value="5000" /><!-- 不使用json,这行可不要 -->
</appSettings>

源码链接: https://pan.quark.cn/s/a4b39357ea24 ### Ubuntu 用户磁盘空间分配与 Linux 硬盘分区方案深入剖析 #### 标题与描述中的核心知识要点说明 本文件将系统性地阐释在 Ubuntu 操作系统中如何为用户科学地分配磁盘空间,并深入分析适用于 Linux 的硬盘分区策略。文件不仅会介绍基础的目录结构及其功能,还会提供具体的分区指导以及在实际操作过程中需要留意的事项。 #### 目录结构及其功能说明 - **/bin**:系统常用基础命令的存储位置。 - **/boot**:包含启动时所需文件,例如内核镜像和初始化脚本等。 - **/dev**:存放设备文件。 - **/etc**:存储系统配置信息。 - **/home**:用户个人目录,每个用户拥有独立的子目录。 - **/lib**:存放运行二进制文件所需的共享库。 - **/mnt**:用于临时挂载其他文件系统的目录,可用于挂载软盘或 CD-ROM 设备。 - **/proc**:虚拟文件系统目录,存储当前运行内核的相关信息。 - **/root**:超级用户(root)的主目录。 - **/sbin**:系统管理程序的存放位置。 - **/tmp**:临时文件存储的目录。 - **/usr**:存放只读数据,包括应用程序的可执行文件和文档等。 - **/var**:存储可变数据文件,例如日志文件和邮件队列等。 - **/X11R6**:X Window 系统的安装路径。 #### 硬盘分区策略分析 文件中强调,在 Linux 环境下进行硬盘分区时需要综合考量多个因素,以确保系统的稳定运行和性能表现。以下是一些关键的分区建议: 1. **/boot ...
代码转载自:https://pan.quark.cn/s/4f1937b2c732 Quartus Prime是由Altera公司(现已被Intel公司所收购)研发的一款集成化电子设计自动化软件,其主要应用领域在于Field-Programmable Gate Array(现场可编程门阵列)以及Complex Programmable Logic Device(复杂可编程逻辑器件)的设计、仿真、综合、布局布线以及编程等任务。在本案例中,所提及的为Quartus Prime 17.1版本的安装程序,该程序内含器件库文件及其他相关组件,适用于Windows 10 64位操作系统环境,并且已有相关测试验证其可用性。 **1. Quartus Prime概述** Quartus Prime是Altera/Intel公司FPGA设计流程的核心工具,它提供了一个集成化的开发平台,支持从设计概念到硬件实现的完整过程。该软件不仅涵盖了逻辑综合、时序分析、仿真、物理设计等基础功能,还包含了高速接口IP核、嵌入式处理器系统、内存资源管理等多种高级特性。 **2. Quartus Prime 17.1版本的新增功能** - QSYS系统构建工具的优化:17.1版本可能对QSYS系统进行了升级,使得系统集成更为便捷,支持更多的外部设备和处理器模型。 - 性能提升:可能增强了综合和布局布线的效率,降低了设计的功耗和面积。 - 新器件支持:可能会增加对最新发布的Altera FPGA和CPLD产品的支持,如Arria 10、Cyclone 10等系列产品。 - 调试功能的改进:可能强化了硬件调试工具,如JTAG调试和软件调试器的性能。 **3. 器件库文件** 器件库文件是Quartu...

62,271

社区成员

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

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

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

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