ASP.NET MVC 1.0 웹 응용 프로그램을 MVC 2.0으로 마이그레이션하는 중이지만 약간의 문제가 있습니다.MVC 1.0에서 MVC 2.0으로 마이그레이션 한 후 UpdateModel()이 실패합니다.
보고서 작성 마법사에서 제목 텍스트 상자를 비워두고 게시 작업에서 일반 제목으로 채우는 것이 가능합니다.
는 제목의 모델에 업데이트를 수행하는 코드는입니다 :
이 if (TryUpdateModel(reportToEdit, new[] { "Title" }))
{
//all ok here try to create (custom validation and attach to graph to follow)
//if title is empty get config subject
if (reportToEdit.Title.Trim().Length <= 0)
reportToEdit.Title = reportConfiguration.Subject;
if (!_service.CreateReport(1, reportToEdit, SelectedUser.ID, reportConfigID, reportCategoryID, reportTypeID, deviceUnitID))
return RedirectToAction("Index");
}
MVC 1.0이 제대로 작동, 텍스트 상자가 비어있는 경우 reportToEdit
빈 제목이, 다음으로 채워되는 Subject
속성
MVC 2.0에서는 실패하거나 false를 반환합니다.
위에 나는 줄을 추가하는 경우 :
이UpdateModel(reportToEdit, new[] { "Title" });
는 MVC2 출시 내가이 주요 변경 참조 노트 읽기
System.InvalidOperationException was unhandled by user code
Message="The model of type 'Footprint.Web.Models.Reports' could not be updated."
Source="System.Web.Mvc"
StackTrace:
at System.Web.Mvc.Controller.UpdateModel[TModel](TModel model, String prefix, String[] includeProperties, String[] excludeProperties, IValueProvider valueProvider)
at System.Web.Mvc.Controller.UpdateModel[TModel](TModel model, String[] includeProperties)
at Footprint.Web.Controllers.ReportsController.Step1(FormCollection form) in C:\TFS Workspace\ExtBusiness_Footprint\Branches\apitts_uioverhaul\Footprint\Footprint.Web\Controllers\ReportsController.cs:line 398
at lambda_method(ExecutionScope , ControllerBase , Object[])
at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClassd.<InvokeActionMethodWithFilters>b__a()
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
InnerException:
를 던졌습니다 : 모델 객체에 대한
모든 재산을 그 IDataErrorInfo를 사용하여 새 값이 설정되었는지 여부에 관계없이 유효성 검사를 수행합니다. ASP.NET MVC 1.0에서는 새 값이 설정된 속성 만 유효성을 검사합니다. ASP.NET MVC 2에서 IDataErrorInfo의 Error 속성은 모든 속성 유효성 검사기가 성공적으로 수행 된 경우에만 호출됩니다.
그러나 이것이 나에게 어떤 영향을 미치는지 혼란 스럽습니다. 엔티티 프레임 워크 생성 클래스를 사용하고 있습니다.
왜 이것이 실패했는지 정확히 알 수 있습니까?
, 그것은하지 않습니다 :)
희망 :
이 이제 코드? MVC 1에서 MVC 2 이상에서 수정 된 문제는 더 복잡한 객체 구조가 있고 EntityRef 객체를 연결 한 경우 화이트리스트 항목이 포함되어 있지 않으면 TryUpdateModel에서 업데이트됩니다. 해당 속성) 전체 "하위"개체의 업데이트가 무시됩니다. 이것은 명백하게 "의도적으로"설계된 것입니다. 나를 위해 매우 귀찮았을 것입니다. –