2015-06-04 33 views
0

我想知道,測試基本CRUD操作中的有效性和錯誤的最佳方法是什麼?試試Catch,ModelState.IsValid還是兩者?

當我第一次用於生成腳手架MVC控制器,他們有這樣的事情:

if (ModelState.IsValid) 
{ 
    // do stuff 
    return View("SuccessfulView") 
} 
// if we got this far something went wrong, redisplay 
return View() 

但現在我得到這樣的:

try 
{ 
    // do stuff 
    return RedirectToAction("SuccessfulView"); 
} 
catch 
{ 
    return View(); 
} 

測試的ModelState是不一樣的測試因爲我很想把它們都放進去。

但是後來我想知道爲什麼MS沒有在更新腳手架代碼時把它們都放進去(這無疑是他們做的 因爲某種原因)。

另外,每一個基本動作,然後開始被變得相當費解:

if (ModelState.IsValid) 
{ 
    try 
    { 
     // do stuff 
     return RedirectToAction("SuccessfulView"); 
    } 
    catch 
    { 
     return View(); 
    } 
} 
// if we got this far something went wrong, redisplay 
return View() 

回答

1

的ModelState - 驗證與你所應用的數據註釋您的視圖模型。

TryCatch - 將捕獲您的代碼中可能出現的任何異常。我想說兩個!

這是我的,

if (ModelState.IsValid) 
{ 
    try 
    { 
     // do stuff 
     return View(); 
    } 
    catch(Exception ex) // catches all exceptions 
    { 
     return View(ex.Message); 
    } 
} 
ModelState.AddModelError("", "Error"); 
return View(model); 
+0

謝謝SHemmelburg。我很好奇爲什麼MS會從腳手架中取代另一個腳手架,而乳清它們不會默認放在兩個腳手架上。這似乎是一個明顯的選擇,除非我錯過了一些東西(這很可能) –

+0

@Martin Hansen Lennox,我同意,也許他們會在某個時候,但現在,只要我們知道如何實現這些功能,我認爲我們會沒事的。 :) – shammelburg

1

認爲微軟不包括在腳手架的try/catch的原因是因爲在地方來處理異常已經是其他機制。請參閱this以獲取Asp.NET MVC中提供的6個不同選項的列表。 MS可能不想規定具體的方法,並希望實施者爲他們自己選擇一個。