2012-07-08 39 views
2

我現在有:如何更好地利用實體模型驗證?

@Html.EditorFor(model => model.PurchasePrice) 

我想此(顯然爲價格輸入)分割成由十進制分離2個獨立的字段。但是如果我使用基本的文本框來做這件事,我將失去利用ASP.NET驗證的能力。

有沒有辦法做到這一點,在剃刀或使用屬性,以便我能夠保持JS和服務器端驗證對我的實體模型?

我可以通過在viewmodel中創建自己的函數輕鬆地在別的地方做到這一點,但我是MVC3的新手,並不完全確定這是否是最好的路線或者有更簡單的方法。

編輯:

這是一種我在想,我不完全瞭解這是如何工作的方向。

我設置了2個字段,1個爲ppDollar,1個爲ppCents。在控制器中我有:

modelname.PurchasePrice = Request["ppDollar"] + Request["ppCent"]; 

但是,我可以看看那個,並告訴這是行不通的。所以,我想這個問題真的是用戶輸入如何針對實體模型進行驗證,以及如何更好地利用內置功能?

+1

所以你想要兩個文本bosex一個數字和另一個小數,但你的模型是作爲一個數字,如果這種情況下,我會建議使用它可能jquey在客戶端,你可能會失去簡單的能力在模型中驗證,但你不必通過編寫一個單獨的模型或HTML助手的麻煩,只是爲了這一點,你仍然可以驗證與jQuery – 2012-07-08 22:46:04

回答

1

您可以爲由EditorFor呈現的特定類型創建自定義編輯器。你可以在網上找到很多關於如何做這件事的例子,其中大部分都是關於定製編輯DateTime,但同樣的想法適用於任何類型。從快速搜索只是一個例子:

http://buildstarted.com/2010/09/10/overriding-displayfor-and-editorfor-to-create-custom-outputs-for-mvc/

簡而言之,該方法是:

  • 創建的局部視圖模板,放置在Views\Shared\EditorTemplates文件夾,具有相同的名稱的類型(例如Decimal.cshtml)。
  • 該視圖應使用您想要顯示的類型作爲其模型:@inherits System.Web.Mvc.WebViewPage<System.Decimal>
  • 使用某些字段命名約定或其他任何方法使視圖顯示任何您想要的內容。
  • 您也可以通過適當的EditorFor過載來傳遞HTML屬性,在您的模板中通過ViewData.ModelMetadata.AdditionalValues屬性引用該屬性。

有一點要注意:一旦你把它定義將被用於調用EditorFor編輯模板。您可以通過將EditorTemplates文件夾移動到相應的視圖子文件夾而不是共享的文件夾來將其範圍擴大到特定的控制器。