-1

我的模式是這樣的:驗證屬性

public class Line 
{ 
    public int CatalogNumber {get; set;} 
    public int TeamCode {get; set;} 
} 

我有獲取目錄號和一組代碼視圖,我要檢查兩件事情:

  1. 沒有在我們的數據庫,目錄號
  2. 有這樣的目錄編號爲給定的球隊

我屏幕ä是一個屬性(源自ValidationAttribute),用於檢查我們的數據庫中是否有這樣的目錄號。但它什麼也沒做!

也許這是不可能的這樣的屬性檢查?

(我知道我可以實現IValidable並覆蓋IsValid方法,但出於我自己的原因,我更喜歡用attribue來做)。

我已經做纔不至於serverPost(阿賈克斯將是一件好事)

我會很感激一個很好的例子熱做到這一點。

p.s. (我們正在使用mvc3)

回答

1

我認爲Remote Validation可以幫助你解決這個問題。你可以用它來檢查數據庫中存在的目錄編號:

public class Line 
{ 
    [Remote("QueryCatalogNumberExists", "Home")] 
    public int CatalogNumber { get; set; } 
    public int TeamCode { get; set; } 
} 

然後在你的控制器(我沒有測試代碼,但它應該是沿東西線):

public JsonResult QueryCatalogNumberExists(int catalogNumber) 
{ 
    if (_repository.QueryCatalogNumberExists(catalogNumber)) 
    { 
     return Json(true, JsonRequestBehavior.AllowGet); 
    } 
    return Json(false, JsonRequestBehavior.AllowGet); 
} 

我相信你也可以有額外的領域,這樣你就可以檢查產品目錄號對於給定的TeamCode是否有效(我認爲TeamCode必須是可以爲空的,因爲用戶在當前輸入目錄號之前可能不會輸入一個模型不需要團隊代碼)。所以,你的模型應該是:

public class Line 
{ 
    [Remote("QueryCatalogNumberExistsForTeamCode", "Home", AdditionalFields = "TeamCode")] 
    public int CatalogNumber { get; set; } 
    public int TeamCode { get; set; } 
} 

和控制器代碼:

public JsonResult QueryCatalogNumberExistsForTeamCode(int catalogNumber, int? teamCode) 
{ 
    if (_repository.QueryCatalogNumberExistsForTeamCode(catalogNumber, teamCode)) 
    { 
     return Json(true, JsonRequestBehavior.AllowGet); 
    } 
    return Json(false, JsonRequestBehavior.AllowGet); 
} 

我希望這點你在正確的方向來解決。

+0

哇,這是一個非常好的答案!我現在要去試試它。 – gdoron 2011-04-04 05:37:52