2010-02-25 105 views
2

我有一個非常基本的實體模型,我試圖添加自定義驗證消息。實體框架+ MVC數據註解

我的元數據是這樣的:

namespace My.Models { 
[MetadataType(typeof(My.Models.ConsumerMetadata))] 
public partial class Consumer 
{ 
} 

public class ConsumerMetadata 
{ 
    [StringLength(5)] 
    [Required(ErrorMessage="First name is an absolute must!")] 
    public string FirstName { get; set; } 
} } 

的問題是,數據註釋,我將不被傳播到視圖中的錯誤 - 那些保持默認的錯誤。

我敢肯定它的簡單的東西,我在這裏失蹤......

+0

這是MVC還是MVC 2? – 2010-02-26 14:39:12

回答

1

你一個Html.ValidationSummary()添加到您的網頁?

+0

呼叫良好。我沒有,並且表明我的元數據按預期工作。那麼問題出在Html.ValidationMessageFor(model => model.Property) - 那些仍然顯示爲「The value」無效「。這似乎是一個已知的錯誤:值''是無效的 – Juvaly 2010-02-26 14:44:15

+0

驗證摘要是沒有必要的。驗證消息顯示錯誤。這取決於您希望顯示錯誤的方式。 – 2010-02-26 14:49:17

+0

在這種情況下,由於內聯驗證消息具有已知錯誤(請參閱http://forums.asp.net/p/1529205/3699143.aspx)並且驗證摘要是顯示正確消息的唯一方法,因此這很重要。 – Juvaly 2010-02-26 16:13:56

0

您的觀點是什麼樣子? 你必須確保你的投入有正確的ID

在MVC1你會寫

<%= Html.TextBox("data.FirstName") %> 
<%= Html.ValidationMessage("data.FirstName") %> 

在MVC2那就更簡單了,特別是如果你有一個強類型的視圖ViewPage<Consumer>

<%= Html.TextBoxFor(model => model.FirstName) %> 
<%= Html.ValidationMessageFor(model => model.FirstName) %> 

您的控制器操作:

public ActionResult AddConsumer(Consumer data) 
{ 
    if (!this.ModelState.IsValid) 
    { ... } 
    ... 
} 

在MVC2中,驗證將在執行進入此操作之前發生。所以你將能夠簡單地檢查ModelState.IsValid。但在MVC中,這是編寫驗證對象的自定義操作篩選器的最佳方式。他們你將不得不裝飾你的動作與過濾器屬性和瞧。你的對象將得到驗證,你可以採取相應的行動。

+0

我正在使用MVC2。閱讀上面的意見,看看1.我提到我使用ValidationMessageFor幫手和2.這是一個確認的錯誤。 – Juvaly 2010-02-27 00:26:54

+0

@Juvaly:謝謝。我沒有意識到這個問題,因爲我不會將EF類傳播到視圖(所以它們將被驗證)。我使用POCO來代替。 – 2010-02-27 07:02:25