簡體   English   中英

驗證ASP.NET MVC框架中的已發布表單數據

[英]Validating posted form data in the ASP.NET MVC framework

我一直在玩ASP.NET MVC框架,讓我感到困惑的一件事就是我打算如何對發布的表單數據進行服務器端驗證。 我認為我不會回發到同一個網址,但如果不這樣做,我如何使用輸入的數據和錯誤消息重新顯示表單? 此外,驗證邏輯應該在哪里? 在模型或控制器? 這似乎是Web表單更強大的少數領域之一(我錯過了驗證控件)。

以下是MVC中流程的概述:

  1. / new - 渲染包含用戶填寫表單的“新”視圖
    • 用戶填寫表單並將其發布到/ create
    • 帖子將路由到控制器上的“創建”操作
    • 在您的操作方法中,使用已發布的數據更新模型。
    • 您的模型應該驗證自己。
    • 如果模型有效,您的控制器應該讀取。
    • 如果模型有效,請將其保存到數據庫。 重定向到/ show以呈現對象的show View。
    • 如果模型無效,請將表單值和錯誤消息保存在TempData中,然后再次重定向到“新建”操作。 使用TempData中的數據填寫表單字段並顯示錯誤消息。

驗證框架將幫助您完成此過程。 此外,我認為ASP.NET MVC團隊正在為下一個預覽計划驗證框架。

您可能想看一下ScottGu關於ASP.Net上一頁的最新帖子。它將介紹一個非常有趣的驗證示例:

http://weblogs.asp.net/scottgu/archive/2008/09/02/asp-net-mvc-preview-5-and-form-posting-scenarios.aspx

據我所知,每個人都在試圖找出“標准”的做法。 那肯定是看看Phil Haack和Scott Guthrie關於MVC的最新帖子,你會發現一些關於他們如何做的有趣信息。 當我為自己玩它時,我為我生成的LinqToSql數據類創建了一個ModelBinder。 你可以查看這篇文章,了解如何組建一個基本的ModelBinder:

ASP.Net MVC Model Binder

在您的操作中,如果您創建了“Product”ModelBinder,您只需聲明操作:

公共ActionResult新產品(產品產品)

並且模型綁定器將負責將發布的數據分配給對象屬性,只要您無論如何都正確構建它。

在你的GetValue()方法中,你可以實現你想要的任何驗證,無論是使用異常,正則表達式,還是你可以調用的任何東西,如:

(ModelStateDictionary_name).AddModelError(“form_element_id”,“entered_value”,“error_message”);

然后你可以在視圖中拋出一個<%= Html.ValidationSummary()%>來顯示你的所有錯誤。

對於客戶端驗證,我只使用了jQuery。 在獲得基本樣本設置之后,您可以開始做一些有趣的事情,將所有這些與部分視圖和Ajax調用相結合。

你看過這個嗎? http://www.codeplex.com/MvcValidatorToolkit

引自該頁面

Validator Toolkit為新的ASP.NET MVC框架提供了一組驗證器,以使用驗證集在客戶端和服務器端驗證HTML表單。

我擔心,比我更精通MVC的人不得不談論你應該把建築物放在哪里。

我只是學習MVC框架,所以我不確定它是多么偏離,但據我所知,你會在View.aspx這樣的View上有一個表單。 然后,此表單將向控制器發送另一個操作方法,例如Update()傳遞您在Edit.aspx中設置的表單內容作為參數。

Update(int id, string name, string foo)

您可以在該方法中進行驗證。 如果一切正常,

return View("Item", yourObject)

Castle項目中有Castle.Components.Validator模塊。 它非常敏捷和強大。 它基於模型屬性(或任何其他源)生成驗證規則,甚至能夠使用jQuery,Prototype Validation,fValidate等生成JS驗證。 當然,在IValidationEngine接口后面抽象驗證器是明智的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM