[英]ASP.NET MVC validation and views
我正在使用MVC來驗證頁面上的一些html文本框,例如在我的控制器中
if (String.IsNullOrEmpty(name))
{
ModelState.AddModelError("name", "You must specify a name.");
}
if (ViewData.ModelState.IsValid)
{
return RedirectToAction("Index");
}
return View();
問題出在這里,如果驗證失敗,則返回View(“Add”)失敗的原因是控制器不處理返回視圖()的視圖,一個選項是使用RedirectToView(“viewname”); 並且它將正常工作除了它沒有通過驗證AddModelError的東西(“它就像第一次加載頁面”)。
我可以通過在返回View()之前重復填充SelectList框的代碼來解決這個問題。
像這樣
ViewData["rooms"] = new SelectList(Villa.intList(10));
ViewData["sleeps"] = new SelectList(Villa.intList(20));
ViewData["accomodationType"] = new SelectList(accomodationList, "accomodationId", "accomodationType");
ViewData["regionName"] = new SelectList(regionList, "regionId", "regionName");
return View();
但是,我認為有一種更好的方法,而不是重復那段代碼,有沒有人知道任何返回重定向視圖並傳遞模型錯誤的方法?
在此先感謝,希望它有一定道理。
獲取用於在(GET)添加操作中初始化ViewData的代碼,並將其重構(提取方法)為獨立的私有方法。 從您的(GET)添加操作中調用該方法。 現在在POST操作中(也就是我猜想,你在上面顯示的內容;目前尚不清楚)你可以調用相同的私有方法來填充ViewData。 現在您不再有任何重復的代碼。 請記住,ViewData是Controller類型的屬性,因此您可以將其設置在任何位置,而不僅僅是在action方法本身。
我必須承認,我對你的意思有些疑惑,所以這是一個通用的答案,可能不准確!
這是一個很好的閱讀。
我可以想到兩種方式。
要更改最少量的代碼,只需將ViewData放在TempData中,然后在Redirect中檢索它。
可能更容易接受的答案是使用上面鏈接中描述的方法。 讓您的表單回復相同的操作。 該操作將有兩個實現 - 一個Post和一個Get。 在Post操作中,執行所有驗證邏輯。 如果驗證有效,請對成功顯示的任何視圖執行重定向操作(Post-Redirect-Get模式)。 如果驗證失敗,則重新顯示表單的相同視圖,並顯示驗證錯誤。
如果這不是你問的問題,那就知道〜
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.