2014-01-13 79 views
0

我正在創建一個Asp.Net MVC應用程序,該應用程序適用於在我們的倉庫中使用的小型堅固耐用的手持設備。由於屏幕很小,我們最終獲得了很多流程,在我們實際處理信息之前,我們會通過多個屏幕輸入信息。例如,如果他們想創建庫存,我們將有一個屏幕詢問他們的位置和物品編號信息,第二個屏幕詢問批次跟蹤信息,然後是第三個屏幕詢問數量信息。在第三個屏幕上進入後,我們將獲取所有信息並創建庫存交易。Asp.Net MVC模型驗證結構

我正在努力如何正確地與模型和驗證結構。我想在每個屏幕上向用戶提供驗證信息。以下是我嘗試的方法:

- 有一個模型和整個過程的視圖。每個屏幕都是視圖中的DIV,我使用JavaScript來隱藏和顯示DIV。我創建了自定義的驗證屬性,我使用模型中的屬性來提供驗證。然後我使用JQuery遠程驗證來執行驗證cliet端,所以我確保當前DIV上的字段在切換到下一個DIV之前是有效的。我用這種方法遇到的問題是手持設備不是真正強大的,並且沒有最好的網絡瀏覽器,所以遠程驗證最終變得不可靠。

- 爲每個頁面有不同的視圖,併爲每個頁面有不同的模型。我再次使用自定義驗證屬性來進行驗證。這種方法效果很好,除了我最終得到了大量相似的不同模型。

- 每個頁面都有不同的視圖,並且在所有頁面上都有一個模型。對於這種方法,我不能使用驗證屬性進行驗證,因爲如果我在模型上需要數量(最後一頁上的字段),那麼它會拋出一個錯誤,說明它在第一頁上是必需的。所以我最終不得不在我的控制器中做我不喜歡的驗證。

我覺得我提出的這三種方法都有重大問題。有沒有更好的方法來處理這個問題?

回答

-1

使用一種模型描述您的數據及其與數據庫的關係。使用映射到視圖的ViewModel以及用戶實際與之交互的內容。

What is a viewmodel?

+0

這個答案如何提供一個實質性的考慮OP應該考慮什麼選項? – rae1

+0

因爲他沒有要求幫忙選擇他的一個選項,所以他在尋求幫助,選擇他可能沒有考慮過的另一個選項。我沒有看到涵蓋的視圖模型選項,因此他可以考慮它。 – erikrunia

0

你有沒有考慮建立一個包含所有每一步的數據的視圖模型(無驗證),但也隨之創建的每個步驟中包含的字段(和驗證)有關該步驟的ViewModels使用包含所有數據的ViewModel實例。舉例來說:

public class EntireProcessModel { 
     public string data1 {get; set;} 
     public double data2 {get; set;} 
} 

public class Step1ViewModel { 
     [Required] 
     public string FieldForData1 {get; set;} 
     public EntireProcessViewModel EpVm {get; set;} 

} 
public class Step2ViewModel { 
     [Required] 
     public string FieldForData2 {get; set;} 
     public EntireProcessViewModel EpVm {get; set;} 

}