0

ユーザーが2種類のオブジェクト間の依存関係を変更できるフォームがあります。

30 個の要素を持つ 1 つのセットがあり、それらの 30 個の要素ごとに、他のコレクションの 26 個の要素の 1 つ、複数、またはすべてを選択できます。したがって、基本的には、30 * 26 のチェックボックスのようなものがあることを意味します(複雑ですが、ビジネスロジックのために複雑です)。同じページにこれが数回ある可能性があるため、1100以上の要素があると思います。

基本的にこのモデルに保存されます:

public class VarDependency{
   public int Id { get; set; }
   public String Name { get; set; }
   public List<ValueDependency> Values { get; set; }
}

public class ValueDependency{
   public int Id { get; set; }
   public String Name{ get; set; }
   public List<AvailableValue> Triggers { get; set; }
}

public class AvailableValue{
   public bool IsSelected { get; set; }
   public String Text { get; set; }
   public int Value { get; set; }
}

ビューには、基本的に 2 つのループがあります。使用可能な値ごとに、LabelFor (Text プロパティに基づく)、チェックボックス (IsSelected に基づく)、および非表示フィールド (Value に基づく) があります。

要素がそれほど多くない場合 (15*15 など)、すべて正常に動作しています。コントローラーでデータを受け取り、それらを処理できますが、要素をさらに取得すると、コントローラーに到達する前にすぐに例外が発生する理由が正確にはわかりません。

System.InvalidOperationException オブジェクトの現在の状態のため、操作は有効ではありません。

System.Web.HttpException (0x80004005): The URL-encoded form data is not valid. ---> System.InvalidOperationException: Operation is not valid due to the current state of the object.
   at System.Web.HttpValueCollection.ThrowIfMaxHttpCollectionKeysExceeded()
   at System.Web.HttpValueCollection.FillFromEncodedBytes(Byte[] bytes, Encoding encoding)
   at System.Web.HttpRequest.FillInFormCollection()
   at System.Web.HttpRequest.FillInFormCollection()
   at System.Web.HttpRequest.get_Form()
   at Microsoft.Web.Infrastructure.DynamicValidationHelper.ValidationUtility.CollectionReplacer.<>c__DisplayClass8.<MakeCollectionsLazy>b__2()
   at Microsoft.Web.Infrastructure.DynamicValidationHelper.ValidationUtility.CollectionReplacer.<>c__DisplayClass12.<ReplaceCollection>b__e()
   at Microsoft.Web.Infrastructure.DynamicValidationHelper.ValidationUtility.CollectionReplacer.<>c__DisplayClass12.<ReplaceCollection>b__11()
   at Microsoft.Web.Infrastructure.DynamicValidationHelper.DeferredCountArrayList.get_Count()
   at System.Collections.Specialized.NameObjectCollectionBase.get_Count()
   at System.Web.HttpRequest.ValidateNameValueCollection(NameValueCollection nvc, RequestValidationSource requestCollection)
   at System.Web.HttpRequest.get_Form()
   at System.Web.HttpRequestWrapper.get_Form()
   at System.Web.Mvc.HttpRequestExtensions.GetHttpMethodOverride(HttpRequestBase request)
   at System.Web.Mvc.AcceptVerbsAttribute.IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo)
   at System.Web.Mvc.HttpPostAttribute.IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo)
   at System.Web.Mvc.ActionMethodSelector.<>c__DisplayClass11.<RunSelectionFilters>b__d(ActionMethodSelectorAttribute attr)
   at System.Linq.Enumerable.All[TSource](IEnumerable`1 source, Func`2 predicate)
   at System.Web.Mvc.ActionMethodSelector.RunSelectionFilters(ControllerContext controllerContext, List`1 methodInfos)
   at System.Web.Mvc.ActionMethodSelector.FindActionMethod(ControllerContext controllerContext, String actionName)
   at System.Web.Mvc.ReflectedControllerDescriptor.FindAction(ControllerContext controllerContext, String actionName)
   at System.Web.Mvc.ControllerActionInvoker.FindAction(ControllerContext controllerContext, ControllerDescriptor controllerDescriptor, String actionName)
   at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)
   at System.Web.Mvc.Controller.ExecuteCore()
   at System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext)
   at System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext)
   at System.Web.Mvc.MvcHandler.<>c__DisplayClass6.<>c__DisplayClassb.<BeginProcessRequest>b__5()
   at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass1.<MakeVoidDelegate>b__0()
   at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
   at System.Web.Mvc.MvcHandler.<>c__DisplayClasse.<EndProcessRequest>b__d()
   at System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f)
   at System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action)
   at System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)
   at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result)
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

Visual Studio のデバッグ モードでも、例外はスローされません。

この問題を解決する方法についての手がかりが見つからないので、助けていただければ幸いです。リリースでいくつかのテストを行っているときに問題が発生します:/

4

1 に答える 1

3

これは、最近導入された、ページが持つことができるコントロールのデフォルトの最大数が原因である可能性があると思います。これは web.config で変更できます。この質問を見てください。

ASP.NET MS11-100:投稿されたフォーム値の最大数の制限を変更するにはどうすればよいですか?

于 2012-09-06T09:22:01.523 に答える