2011-04-12 48 views
13

我已經在我的模型以下屬性ASP.Net MVC3郵件/電話數據註釋不工作

[Required] 
    [DataType(DataType.PhoneNumber, ErrorMessage = "Invalid Phone Number")] 
    public string PhoneNumber 
    { 
     get; 
     set; 

    } 

    [Required] 
    [DataType(DataType.EmailAddress, ErrorMessage = "Invalid Email Address")] 
    public string EmailAddress 
    { 
     get; 
     set; 

    } 

相應的視圖

<td> 
        Email 
       </td> 
       <td> 
        @Html.EditorFor(model => model.EmailAddress) 
        @Html.ValidationMessageFor(model => model.EmailAddress, "*") 
       </td> 
      </tr> 
      <tr> 
       <td> 
        Phone # 
       </td> 
       <td> 
        @Html.TextBoxFor(model => model.PhoneNumber) 
        @Html.ValidationMessageFor(model => model.PhoneNumber, "*") 
       </td> 

當我使這個頁面我看到了必需的屬性被觸發。但是,如果我鍵入無效數據,則DataType屬性不會被觸發。我看到源html並沒有看到爲這些驗證發出的任何代碼。 我有以下作爲我的觀點的一部分太

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"/> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"/> 

回答

10

看到這個職位:

Is the DataTypeAttribute validation working in MVC2?

重要的是要注意的是,數據類型屬性通常用於格式化的目的是很重要的,不進行驗證。從技術上講,有各種各樣的電子郵件格式和電話號碼格式(請參閱電子郵件:http://www.regular-expressions.info/email.html)。

此外,自定義轉換器可以將看起來非電子郵件字符串轉換爲電子郵件(我在域名網址com = [email protected]),因此有默認驗證正則表達式飛出窗口。由開發人員爲其特定目的使用正確的正則表達式,並確保他們只接受他們認爲準確的地址。

7

我剛做了一個類似的問題我自己。我使用電子郵件的數據類型進行了模型設置,但未將其驗證爲電子郵件。我注意到在HTML中,視圖產生的電子郵件地址的文本框有一種文本。然後,我改變了我的看法如下並且這個固定:

@Html.TextBoxFor(m => m.Email, new { type = "email" }) 

的是使用jQuery驗證JavaScript libary

+1

email輸入類型是HTML 5特定的 - 它只是被渲染成舊的瀏覽器常規的文本框中。 – 2012-09-05 21:53:55

16

你可以考慮使用ASP.NET MVC 3 FuturesHere是描述有驗證一個很好的文章:

public class UserInformation 
{ 
    [Required] 
    public string Name { get; set; } 

    [Required] 
    [EmailAddress] 
    public string Email { get; set; } 

    [Required] 
    [Url] 
    public string Website { get; set; } 

    [Required] 
    [CreditCard] 
    public string CreditCard { get; set; } 

    [Required] 
    [FileExtensions(Extensions = "jpg,jpeg")] 
    public string Image { get; set; } 
}