나는 MVC를 좋아하지만 불행히도 모든 자습서, 데모 및 모든 리소스는 Entity Framework를 사용하여 ViewData를 생성하고 DataSet 대신 LINQ to SQL을 사용합니다.
저는 기존 비즈니스 로직을 재사용하고 클라이언트 (자신의 권리로 훌륭한 코더)는 데이터 세트를 계속 사용하려고합니다 ... 그래서 이것들을 벗어날 수 없습니다.완전히 합법적 인 DBNULL을 처리하는 데 문제가 있습니다. 모델 데이터보기로 전달되는 DataSets DataTables 사용. ASP.NET MVC2
데이터베이스에 NULL이 허용되는 열을 포함하는 테이블이 하나 있습니다. 이제이
"테이블 'FNN_CARRIERS_DESC'에서 열 'FNN_CARRIERS_DESC'DBNull이 있습니다에 대한 값"내가 ...이 액세스하려고 할 때이 null의 경우도 내가 예외가 확인 dataset.designer.vb 파일에 의해 생성됩니다.
나는 당신이 할 말을 알고 있습니다. "FNN_BRAND IS Null !!!" 사실입니다. 지침은 크게 감상 할 수
<%= Html.TextBox("FNN_CARRIERS_DESCTextBox", If(IsNothing(Model.FNN_CARRIERS_DESC), Model.FNN_CARRIERS_DESC, ""))%>
: 하지만 ... 스택 추적이 오류를 생성 내 코드의 라인을 따라이입니다! 필자의 주장은 이것이 MVC의 문제가 아니라 데이터 세트에 대해 이해하지 못하는 것임을 말해 준다. 내가 시도했습니다
<Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _ Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")> _ Public Property FNN_CARRIERS_DESC() As String Get Try Return CType(Me(Me.tableVIT_FNN_CommsService.FNN_CARRIERS_DESCColumn),String) Catch e As Global.System.InvalidCastException Throw New Global.System.Data.StrongTypingException("The value for column 'FNN_CARRIERS_DESC' in table 'VIT_FNN_CommsService' is DBNul"& _ "l.", e) End Try End Get Set Me(Me.tableVIT_FNN_CommsService.FNN_CARRIERS_DESCColumn) = value End Set End Property
것
이 : : 예외를 언급 이
- 이 무엇 인 NULL을 반환 할 것입니다
이
예외를 던지는 reference.vb 파일의 코드 테이블의 변경 또는 테이블 결과를 생성하는 저장 프로 시저가 변경되면 데이터 집합이 다시 작성되기를 원합니다.- 데이터 테이블의 열에 대한 규칙이 변경되었습니다. 실제로 아무런 결과도 산출되지 않았고 테이블 재생성에서도 무시됩니다.
- IsNothing (열) 또는 isDBnull (열) 열을 검색하고 캐스팅하기 때문에 실제로 오류가 발생합니다.
MVC 아키텍처를 유지하면서이를 해결하는 가장 좋은 방법을 알아야합니다.
나를 괴롭히지 마라 ... 너는 내 유일한 희망이야!
고객에게 설명 할 때 Korz가 솔루션을 바꿀 수도 있지만 이는 분명 좋은 조언입니다 .-) –
Cool ok 그래서 이것이 뷰 모델이라고합니다. – korz
@korz, 정확하지는 않습니다. 뷰 모델은 모델 (이 경우 제품)과 뷰 사이에있는 항목입니다. 주어진 뷰의 필요에 맞게 특별히 맞춤 설정된 클래스입니다. 예를 들어, Product 모델에 10 개의 속성이 있지만 그 중 두 개만 표시하고보기에 표시하려면 구체적으로 형식화해야 ProductViewModel 클래스를 작성해야합니다. 그런 다음 컨트롤러는 제품 모델과 뷰 모델을 매핑하고 뷰 모델을 뷰에 전달합니다. 예제에서 모델을 나쁜 관행이지만 뷰의 목적을 달성하기에 충분하도록 직접 전달했습니다. –