2011-09-07 192 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> 

如果我使用[對比( 「輸入」)],客戶端驗證失敗。 如果我使用[比較(「Data.Input」)],客戶端驗證工作,但服務器端失敗。 在課堂CompareAttribute.cs,方法

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

未能找到Data.Input物業。

使用Compare for Nested Property比較的正確方法是什麼?

回答

2

更改您的視圖模型和稍後映射到實體:

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

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

感謝您的答覆。我正在做你在生產中建議的內容,但想知道如何使用比較和嵌套屬性。背後的原因是在多個視圖模型中使用相同的數據模型,並且在數據模型上使用的驗證規則需要複製到所有視圖模型中,這是我們都希望避免的。如果在當前mvc發行版中不可行,那麼需要爲將來的發行版更新compare屬性的代碼以適應嵌套屬性驗證。 – 2011-09-08 15:55:18