如何解决: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);
}
}
...全文
1066 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>

62,046

社区成员

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

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

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

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