2012-09-06 2 views
0

사용자가 두 종류의 개체 사이의 종속성을 변경할 수있는 양식이 있습니다.Checkbox가 많이있을 때 InvalidOperationException이 발생합니까?

30 개의 요소가있는 집합이 하나 있고 그 30 개의 요소마다 하나씩 다른 모음의 26 개 요소 중 하나, 여러 개 또는 모두를 선택할 수 있습니다. 그래서 기본적으로 나는 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; } 
} 

, 나는 기본적으로 두 개의 루프가 있습니다. 사용 가능한 모든 값에 대해 LabelFor (Text 속성 기반), 확인란 (IsSelected 기반) 및 숨겨진 필드 (값 기반)가 있습니다.

너무 많은 요소 (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의 디버그 모드에서도 예외가 발생하지 않습니다.

나는이 문제를 해결하는, 그래서 어떤 도움은 매우 문제가 우리가 릴리스에 대한 몇 가지 테스트를 수행 할 때 표시, 평가 될 것입니다 방법에 대한 납 찾을 수 없습니다

:/

답변

3

내가이 원인 일 수 있습니다 생각을 페이지가 가질 수있는 최근에 도입 된 기본 최대 컨트롤 수

ASP.NET MS11-100: how can I change the limit on the maximum number of posted form values?

+0

Yes (예) 나는 같은 링크 30 분 전에 발견, 감사합니다 : 당신은이 질문에서보세요 Web.config의 에서 변경할 수 있습니다. 이런 종류의 다른 설정이 있는지 알고 있습니까? 비슷한 문제가 생겼고 모델이 null이기 때문에 IIS 서버에서 재생할 수있었습니다. – J4N

관련 문제