2011-09-07 3 views
1

MVC3을 사용할 때 오류가 발생합니다. 중첩 된 속성과 속성을 비교합니다.Asp.net MVC3 속성 비교 : 중첩 된 속성과 비교할 때 오류가 발생했습니다.

모델과 뷰 모델 :

public class Data 
{ 
    public string Input { get; set; } 
} 

public class DataVM 
{ 
    public Data Data { get; set; } 
    [Compare("Data.Input")] 
    public string ConfirmInput { get; set; } 
} 

컨트롤러 :

public ActionResult Data() { 
    return View(new DataVM()); 
} 

[HttpPost] 
public ActionResult Data(FormCollection fc) { 
    DataVM vm = new DataVM(); 
    TryUpdateModel(vm, fc); 
    if (ModelState.IsValid){ 
     return Content("Success!!!"); 
    } 
    return View(vm); 
} 

보기 :

@model myth.Models.ViewModels.DataVM 

@using (Html.BeginForm()) { 
@Html.ValidationSummary(true) 

@Html.EditorFor(m => m.Data.Input) 
@Html.ValidationMessageFor(m => m.Data.Input) 
<br /> 
@Html.EditorFor(m => m.ConfirmInput) 
@Html.ValidationMessageFor(m => m.ConfirmInput) 
<br /> 
<input type="submit" value="Save" /> 
} 
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"> </script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 

내가 사용하는 경우 [비교 (이하

샘플 코드는 "Input")], 클라이언트 측 유효성 검사가 실패합니다. [Compare ("Data.Input")]을 사용하면 클라이언트 측 유효성 검사는 작동하지만 서버 측은 실패합니다.

protected override ValidationResult IsValid(...) { .. }, 

클래스 CompareAttribute.cs에서 , 방법은 Data.Input 재산권을 찾기 위해 실패합니다.

중첩 된 속성 비교를 위해 비교를 사용하는 올바른 방법은 무엇입니까?

답변

2
는 뷰 모델을 변경하고 나중에 개체에 다시 매핑

: 답장을

public class DataVM 
{ 
    public string Input { get; set; } 

    [Compare("Input")] 
    public string ConfirmInput { get; set; } 
} 
+0

감사합니다. 프로덕션에서 제안한 내용을 수행하고 있지만 중첩 된 특성과 비교하는 방법을 알고 싶습니다. 그 이유는 여러 뷰 모델에서 동일한 데이터 모델을 사용하고 데이터 모델에서 사용되는 유효성 검사 규칙을 모든 뷰 모델에 복사해야한다는 것입니다. 현재 mvc 릴리스에서 실행 가능하지 않은 경우 중첩 된 속성 유효성 검사를 수용하기 위해 향후 릴리스에서 compare 특성의 코드를 업데이트해야합니다. –