2011-10-17 18 views
1

在我的DB類我有這樣的功能:如何在我的圖書館添加模型狀態?

 //Check if the user login exists in the DB if this is a new user. 
     if ((userModelItem.UserId == 0) || (userModelItem.UserId == null)) 
     { 
      if (_db.ABUsers.Count(s => s.Loggin1 == user.Loggin1 || s.Loggin1 == user.Loggin2 || 
       s.Loggin2 == user.Loggin1 || s.Loggin2 == user.Loggin2) > 0) 
      { 
       var exLog = new ExceptionThrowHandler(); 
       exLog.SaveNewException("SaveUserModelItem", "ABUserRepository", "Loggin1 or loggin2 exists in DB"); 
       return null; 

是否有可能到這裏也嘗試添加錯誤的ModelState中,而無需通過modestate爲對象的功能? IE可以從httpcontext.current中獲取modestate嗎?

回答

0

IE可以從httpcontext.current中獲取modestate嗎?

雖然你可以使用類似System.Web.HttpContext我會強烈建議反對。使用這樣的環境值會使您的代碼無法通過單元測試進行測試。

最好的辦法是將上下文值傳遞給類或返回一些內容,以便適當的層訪問HTTP上下文。

+0

雖然原則上我同意,在這種情況下,我需要通過HttpContext。你能解釋一下嗎? – devzero

+0

對不起,我的壞。我誤解了你的問題。我雖然你想要HttpContext,但現在我意識到你想要的ModelState。我不知道有什麼辦法解決這個問題。 –

0

很難給出很多建議,不知道你在哪裏試圖調用這個函數,因爲這會影響你可能會得到的東西。據我所知,從HttpContext.Current中訪問ModelState是不可能的,雖然知道更多關於你的情況可能有助於找到另一種解決方法。

不知道更多最好的我可以建議將是一箇中間層的助手函數,它需要模型狀態然後調用你的數據庫函數,測試結果,看看它是否需要影響模型狀態,然後返回原始響應。

+0

這是一個非常簡單的設置。我有3個項目,#1是mvc網站。 #2是一個類庫,#3是DB的所有dbml文件。從#1我做到:var uHandler = new UserHandler(); abItem = uHandler.SaveUserModelItem(item);處理程序然後執行一些邏輯,然後以相同的方式調用存儲庫類:var uRep = new userRepository;返回uRep.SaveUserModelItem(item);對於這個快速修復,我想從存儲庫中添加到ModelState中。 – devzero

0

爲什麼不從數據訪問層拋出異常,將其捕獲到調用控制器中,並在那裏更新模型狀態?這似乎是一個更清晰的關注與我分離。

+0

雖然我完全同意這一點,但由於例外情況在我的控制器下方的層中處理,並且從未上升到控制器,因此需要進行重大改寫。我現在需要的是快速從我的數據庫獲取信息到我的控制器。重寫將在稍後進行。 – devzero