2008-08-13 34 views
10

我一直在ASP.NET MVC框架和一兩件事,真的困惑我玩弄我是怎樣,我的意思辦提交的表單數據的服務器端驗證。我認爲我不會回發到相同的URL,但如果我不這樣做,我如何重新顯示輸入的數據和錯誤消息的表單?另外,驗證邏輯應該放在哪裏?在模型或控制器中?這似乎是Web表單更強大的幾個領域之一(我錯過了驗證控件)。驗證提交的表單數據在ASP.NET MVC框架

回答

2

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

從頁面

的驗證工具包提供報價使用 驗證集客戶端和服務器端的新ASP.NET MVC框架 上驗證 HTML表單驗證的一套 。

恐怕有人比我更懂MVC精明的人會不得不在建築物的哪個位置說些什麼。

+0

我確實看了一下CodePlex項目,但我並沒有對我所看到的(當時)印象深刻。也許現在好多了。我會再看一次。顯然,Jeff和團隊必須驗證StackOverflow中的表單數據。當我查看[問一個問題](http://stackoverflow.com/questions/ask)頁面的HTML時,它看起來像頁面發回自己。我想知道他們是如何實施驗證的。 – 2008-08-13 20:15:38

0

我剛學的MVC框架太,所以我不知道如何關閉這個,但是從我的理解,你會對一個視圖,如Edit.aspx形式。然後,此表單會將控件傳遞給另一個操作方法,如Update()將您在Edit.aspx中設置的表單的內容作爲參數傳遞。

Update(int id, string name, string foo) 

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

return View("Item", yourObject) 
12

下面是MVC流的概述:

  1. /新 - 渲染包含表格的「新」觀點,爲用戶填寫
    • 用戶填寫表單並將其發佈到/創建
    • 該職位被路由到您的控制器上的創建操作
    • 在您的操作方法中,使用發佈的數據。
    • 你的模型應該驗證自己。
    • 如果模型有效,您的控制器應該閱讀。
    • 如果模型有效,請將其保存到數據庫中。重定向到/ show以呈現您的對象的show View。
    • 如果模型無效,請將表單值和錯誤消息保存在TempData中,然後重新指向New操作。使用TempData中的數據填寫表單域並顯示錯誤消息。

驗證框架將幫助你一起在這個過程中。另外,我認爲ASP.NET MVC團隊正在規劃下一次預覽的驗證框架。

+0

優秀的總結!用示例 – Cherian 2009-04-09 04:10:54

0

Castle項目中有Castle.Components.Validator模塊。它非常靈活和強大。它基於模型屬性(或任何其他來源)生成驗證規則,甚至可以使用jQuery,Prototype Validation,fValidate和其他來生成JS驗證。 將驗證程序從IValidationEngine接口中抽象出來是明智的。

3

至於我可以告訴大家仍然試圖找出做到這一點的「標準」方式。這就是說,絕對看看Phil Haack和Scott Guthrie在MVC上的最新帖子,你會發現他們如何做的一些有趣的信息。當我只是爲自己玩耍時,我爲我生成的LinqToSql數據類創建了一個ModelBinder。你可以看看這篇文章,瞭解如何把一個基本模型綁定器:

ASP.Net MVC Model Binder

的在你的行動,如果你創造了一個「產品」 ModelBinder的你只需要聲明的動作,像這樣:

public ActionResult New(Product prod)

只要你已經建立了它,模型聯編程序將負責將發佈的數據分配給對象屬性。

後您的GetValue(),你可以實現你想要的任何驗證,是否使用異常的,正則表達式的,或者任何你可以像調用方法中:

(ModelStateDictionary_name).AddModelError(「form_element_id」,「 entered_value「,」error_message「);

然後,您可以在視圖中僅顯示<%= Html.ValidationSummary()%>以顯示所有錯誤。

對於客戶端驗證,我只是使用jQuery。在設置好基本示例之後,您可以開始將所有這些與部分視圖和Ajax調用結合起來進行一些有趣的事情。