Проверки не отображаются с использованием EF Code First со сложными типами

Это продолжение этого вопросаМодель класса и картография

У меня был класс клиента, теперь он работает нормально, и этоопределяется как

using System;

using System.ComponentModel.DataAnnotations;
using System.ComponentModel;

using DataAnnotationsExtensions;
using System.ComponentModel.DataAnnotations.Schema;
using System.Collections.Generic;

namespace CardNumbers.Objects
{
    [ComplexType]
    public class PhoneInfo
    {
        [DataType(DataType.PhoneNumber)]
        [StringLength(10)]
        [DisplayName("Phone")]
        public virtual string Phone { get; set; }

        [StringLength(5)]
        [DisplayName("Ext")]
        public virtual string Ext { get; set; }

        public bool HasValue
        {
            get
            {
                return (Phone != null || Ext != null);
            }
        }

    }

      [ComplexType]
      public class ContactDetail
      {
          //Constructor
          public ContactDetail()
          {
              phoneInfo = new PhoneInfo();
          }

          [StringLength(100)]
          [DisplayName("Contact Name")]
          [DisplayFormat(NullDisplayText = "")]
          public virtual string Contact { get; set; }

          [Email]
          [StringLength(100)]
          [DisplayName("Email")]
          public virtual string Email { get; set; }

          public virtual PhoneInfo phoneInfo { get; set; }
          public bool HasValue
          {
              get
              {
                  return (Contact != null || Email != null || phoneInfo.HasValue);
              }
          }
      }

/// 
/// Client class (Client No, Client Name, Address, Contact1, Contact2 info, Created By, Modified By (operator and date)
/// 
    public class Client
    {
        public Client()
        {
            Contact1 = new ContactDetail();
            Contact2 = new ContactDetail();
     }

        [Key]
        [Column("ClientId",TypeName = "int")]
        public virtual int Id { get; set; }
        [Required]
        [DisplayName("Client No")]
        [Column("client_no", TypeName = "smallint")]
        public virtual Int16 Number { get; set; }

        [Required]
        [Column("client_name", TypeName = "varchar")]
        [DisplayName("Client Name")]
        [MaxLength(30, ErrorMessage = "Client Name should not be longer than 30 characters" )]
        [MinLength(3, ErrorMessage = "Client Name is too short")]
        public virtual string Name { get; set; }

        [DataType(DataType.MultilineText)]
        public virtual string Address { get; set; }

        public virtual ContactDetail Contact1 {get; set;}
        public virtual ContactDetail Contact2 {get; set;}

        [ForeignKey("EnteredByOperator")]
        public string EnteredBy { get; set; }

        [InverseProperty("ClientsEnteredBy")]
        public virtual Operator EnteredByOperator { get; set; }

        [ForeignKey("ModifiedByOperator")]
        public string ModifiedBy { get; set; }

        [InverseProperty("ClientsUpdatedBy")]
        public virtual Operator ModifiedByOperator { get; set; }

        [DataType(DataType.DateTime)]
        [DisplayName("Created on")]
        public DateTime EnteredOn { get; set; }

        [DataType(DataType.DateTime)]
        [DisplayName("Modified on")]
        public DateTime? ModifiedOn { get; set; }

        public virtual ICollection ClientOrders { get; set; }

        public virtual ICollection Reorders { get; set; }
    }
}

Я сопоставил имена столбцов с помощью Fluent API, и я также переопределил свой оригинал "хранилище» классы должны быть очень похожи на определенные в этом урокеhttp://code.msdn.microsoft.com/ASPNET-MVC-Application-b01a9fe8

Это мое текущее частичное представление для клиентской формы с именем _ClientForm:

@using WebDemo.Helper
@model CardNumbers.Objects.Client

    Client Info

    @Html.ValidationSummary(true)

    
    @Html.HiddenFor(model => model.Id)
    @Html.EditorFor(model => model.Number, EditorTemplate.TextBox)

    @Html.EditorFor(model => model.Name, EditorTemplate.TextBox)

    @Html.EditorFor(model => model.Address, EditorTemplate.EditBox)

    
        @*Contact 1*@

        

         @*@Html.EditorFor(model=>model.Contact1)*@
            @Html.EditorFor(model=>model.Contact1.Contact, EditorTemplate.TextBox)
            @Html.EditorFor(model=>model.Contact1.Email, EditorTemplate.TextBox)
        

        @*Contact2*@
        

        @*   @Html.EditorFor(model => model.Contact2)*@
        
    
    @**@
    
        Save
        Cancel
    

Я уже пытался вернуться к первоначальному способу только одного уровня, и я также прокомментировал вторую информацию о Contact2, но проверка электронной почты все еще нене работают и все другие проверки также неКажется, не работает.

Текстовые поля EditorFor определены на основе этого сообщения в блоге.http://fusionovation.com/post/2010/02/15/adding-a-rich-text-editor-to-asp-net-mvc-using-strongly-typed-helpers-dataannotations-amp-jquery.aspx

И это два новых редактора, которые я добавил: PhoneInfo.cshtml

@using WebDemo.Helper
@model CardNumbers.Objects.PhoneInfo


    
        @Html.EditorFor(model => model.Phone, EditorTemplate.TextBox)
    
    
        @Html.EditorFor(model => model.Ext, EditorTemplate.TextBox)
    

И ContactDetail.cshtml

@using WebDemo.Helper
@model CardNumbers.Objects.ContactDetail

@Html.EditorFor(model => model.Contact, EditorTemplate.TextBox)
@Html.EditorFor(model => model.Email, EditorTemplate.TextBox)
@Html.EditorFor(model=>model.phoneInfo)

Итак, как вы можете видеть, код представлений теперь очень компактен.

Тем не менее, с учетом всего этого, проверки небольше не вижу огня. Я использовал для проверки валидации на EMail, набирая мусор. Используется для предоставления сообщения проверки рядом с текстовым полем. Сейчас я наблюдаю, что текстовое поле электронной почты принимает красную рамку, но сообщения нет.

Вы видите, чего мне не хватает сейчас и если этоМожно ли использовать сложный тип и проверки?

Чтобы уточнить, _ClientForm вызывается из этого представления клиента:

@model CardNumbers.Objects.Client

@{
    ViewBag.Title = "Client";
}

@section scripts {
    
}

 
        Client No: 
        <br>
        Client Name: 
        

             


    
    


   


        @{Html.RenderPartial("_ClientForm", Model)   ;}

    

Благодарю.

Ответы на вопрос(2)

Ваш ответ на вопрос