嚴重的n00b警告在這裏;請憐憫!ASP.NET MVC:如何使用Html.ValidationSummary向最終用戶解釋無效類型違規?
因此,我完成了Nerd Dinner MVC Tutorial,現在我正在使用Nerd Dinner程序將VB.NET應用程序轉換爲ASP.NET MVC,作爲一種粗略模板。
我使用「的IsValid/GetRuleViolations()」的圖案來識別無效用戶輸入或違反業務規則的值。我正在使用LINQ to SQL,並利用「OnValidate()」鉤子,該鉤子允許我在嘗試通過CustomerRepository類保存對數據庫的更改時運行驗證並拋出應用程序異常。
總之,一切正常,只是在時間的形式值達到我的驗證方法無效的類型已經被轉換爲默認或現有的值。 (我有一個「StreetNumber」屬性是一個整數,但我想這對DateTime或任何其他非字符串也是一個問題。)
現在,我猜測UpdateModel()方法會拋出一個異常,然後更改值,因爲Html.ValidationMessage顯示在StreetNumber字段旁邊,但我的驗證方法從未看到原始輸入。有兩個問題:
雖然Html.ValidationMessage做信號,什麼是錯,沒有在Html.ValidationSummary沒有相應的條目。如果我甚至可以讓異常信息顯示在那裏,表明一個無效的投射或者什麼都比沒有好。
駐留在我的客戶部分類我的驗證方法永遠看不到原來的用戶輸入,所以我不知道,如果問題是缺少條目或無效的類型。我無法弄清楚如何讓我的驗證邏輯在一個地方保持良好和整潔,並仍然可以訪問表單值。
我當然可以在視圖中編寫一些邏輯來處理用戶輸入,但這看起來與我應該用MVC做的事情完全相反。
我需要一個新的驗證模式或者是有一些方法,以原來的形式值傳遞給處理我的模型類?
CustomerController代碼
// POST: /Customers/Edit/[id]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(int id, FormCollection formValues)
{
Customer customer = customerRepository.GetCustomer(id);
try
{
UpdateModel(customer);
customerRepository.Save();
return RedirectToAction("Details", new { id = customer.AccountID });
}
catch
{
foreach (var issue in customer.GetRuleViolations())
ModelState.AddModelError(issue.PropertyName, issue.ErrorMessage);
}
return View(customer);
}
哇感謝詳細的答覆!這需要我花一段時間來解析,但我一定會在沉浸於自己之後再回來看看。謝謝! – 2010-04-21 23:57:37
您的帖子是一個巨大的幫助!感謝您指點我正確的方向! – 2010-04-24 01:49:00
很樂意提供幫助:-) – Charlino 2010-04-24 01:51:06