2014-04-16 92 views
1

我是.Net MVC的新手。.Net MVC使用不同的驗證規則創建和編輯數據庫

目前由於服務器規範,我使用MVC 4和Visual Studio 2012 for Web。

我正在使用CRUD操作的實體框架。

我的問題是,我有點困惑與如何指定不同的驗證規則創建和編輯的操作:

我的班級是這樣的: 公共類出口 { [關鍵] 公衆詮釋outletID {get;組; }

[Required] 
    [StringLength(10)] 
    public string outletCode { get; set; } 

    [Required] 
    [StringLength(100)] 
    public string outletName { get; set; } 

    [Required] 
    [StringLength(50)] 
    public string outletAreaManager { get; set; } 

    [Required] 
    [StringLength(200)] 
    public string outletAddress { get; set; } 

    [StringLength(20)] 
    public string outletUnitNo { get; set; } 

    [Required] 
    [StringLength(6)] 
    public string outletPostalCode { get; set; } 

    [StringLength(10)] 
    public string outletPhoneNo { get; set; } 
} 

當用戶創建新的出路,他們可以在所有的領域鍵,但什麼時候要編輯的出口,像OutletCode一些領域,outletAreaManager是不可修改的形式,並且由於不顯示出於某種安全原因,我無法將其存儲在隱藏的域中,那麼執行此操作的最佳方法是什麼?我的意思是如何在更新到數據庫時對其進行編碼?如果我使用ModelState.isValid,它將觸發outletCode和outletAreaManager的必需屬性。

在此先感謝。

回答

0

那麼您可以將它們存儲在隱藏字段中,您可以將它們存儲在禁用的字段中。雖然這是非常值得信任的驗證。你需要拆分你的模型。這通常是人們爲MVC創建ViewModels的原因,然後將視圖模型中的值映射到實體模型中。如果你這樣做了,那麼當你提取更新的記錄時,你根本不會更新那些不可更改的值。

1

你說你使用EF作爲數據庫。上面的類看起來像一個View Model類。我假設你正在實體類和這個視圖模型類之間進行映射。

爲了適應不同的規則,你應該創建兩個不同的類。爲避免重複的代碼在規則相同的情況下創建一個基類,然後實現差異的兩個dervied類。

像這樣的東西可能:

public class OutletBase { 

    [Key] 
    public int outletID { get; set; } 

    [Required] 
    [StringLength(100)] 
    public string outletName { get; set; } 

    [Required] 
    [StringLength(200)] 
    public string outletAddress { get; set; } 

    [StringLength(20)] 
    public string outletUnitNo { get; set; } 

    [Required] 
    [StringLength(6)] 
    public string outletPostalCode { get; set; } 

    [StringLength(10)] 
    public string outletPhoneNo { get; set; } 
} 


public class OutledCreate : OutletBase 
{ 
     [Required] 
     [StringLength(10)] 
     public string outletCode { get; set; } 

     [Required] 
     [StringLength(50)] 
     public string outletAreaManager { get; set; } 

} 

public class OutletEdit : OutletBase  { 
} 
0

對不起,令你所有混淆。

其實我的意思是部分更新,所以我只需要對部分字段執行表單驗證,並且我使用TryUpdateModel解決了我的問題。

感謝和歡呼所有

相關問題