2012-07-03 65 views
2

我是MVC3的新手。我將ItemNo字段用作唯一字段。但該字段可以編輯。如果我使用現有值在ItemNo中創建一個值,那麼遠程驗證工作正常。如果我在可編輯模式下這樣做,它會像創建Action方法一樣重複相同的操作。MVC3中的唯一性遠程驗證不適用於可編輯模式

這裏是我的驗證控制器:

這裏是我的模型類

[Required] 
[Remote("IsItemNoAvailable", "Validation")] 
[Editable(true)] 
public string ItemNo { get; set; } 

請給我建議以何種方式,我可以在編輯模式下實現這一目標。

回答

4

您應該使用RemoteAttribute.AdditionalFields財產,並通過您的模型的Id進行驗證。比起在行動中,你應該檢查db不僅是ItemNo,而且Id也是。

[Required] 
[Remote("IsItemNoAvailable", "Validation", AdditionalFields = "Id")] 
[Editable(true)] 
public string ItemNo { get; set; } 

和控制器的方法(請注意,我也重新分解你的選擇)

[OutputCache(Location = OutputCacheLocation.None, NoStore = true)] 
public class ValidationController : Controller 
{ 
    ItemControlDBContext db = new ItemControlDBContext(); 
    public JsonResult IsItemNoAvailable(string ItemNo, int ID=0) 
    { 
     bool itemNoAlreadyExists = db.Item.Any(item => item.ItemNo == itemNo && item.ID != ID); 

     if (itemNoAlreadyExists) 
     { 
      return Json("The ItemNo is already available. Try another ItemNo.", JsonRequestBehavior.AllowGet); 
     } 
     return Json(true, JsonRequestBehavior.AllowGet); 
    } 

} 
+0

>如果我添加id作爲另一個參數則遠程驗證工作不正常。 – user1495547

+0

@ user1495547添加參數是正確的方法。 id是否正確傳遞?你應該調試問題,並提供更多的細節:) – archil

+0

如果我添加ItemNO和Id作爲2參數,然後編輯動作工作正常。但是,創建操作方法並未調用遠程驗證。即使它根本不調用驗證JSON方法。我認爲創建活動沒有Id。以便創建操作不會調用驗證。 – user1495547