2010-12-16 338 views
0

Comment est-ce que je montrerai le DsiplayName correct sur ma vue en considérant le modèle suivant.Les métadonnées DisplayName ne s'affichent pas à l'affichage

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<Project.Models.RegisterViewModel>" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server"> 
    <% using (Html.BeginForm()) 
     {%> 
    <table> 
     <tr> 
      <td class="label"> 
       <%: Html.LabelFor(model => model.User.UserPrimaryEmail)%> 
      </td> 
      <td class="field"> 
       <%: Html.TextBoxFor(model => model.User.UserPrimaryEmail)%> 
      </td> 
      <td class="field-error"> 
       <div class="field-error-msg"> 
        <%: Html.ValidationMessageFor(model => model.User.UserPrimaryEmail)%> 
       </div> 
      </td> 
     </tr> 
</table> 
</asp:Content> 
public class RegisterViewModel 
{ 
    public User User { get; set; } 
} 


[MetadataType(typeof(UserMetaData))] 
public partial class User : UserBase 
{ 
//Inherits from Generated Class UserBase 
//to set default values here for the constructor 

    // Not used except as a source of metadata 
    public class UserMetaData 
    { 

     [Required] 
     [DisplayName("Email Login")] 
     [DataType(DataType.EmailAddress)] 
     [Email(ErrorMessage = "Invalid Email")] 
     public string UserPrimaryEmail { get; set; } 


    } 

} 

La forme ne présente pas "Email Connexion" mais "UserPrimaryEmail"

+0

double possible de [métadonnées DisplayName ne se présente pas sur la vue] (http://stackoverflow.com/questions/4456860/displayname-metadata-does-not-show -up-on-view) – SLaks

+0

ma connexion Internet était lente il y a un certain temps. S'il vous plaît signaler l'autre. pas ça. –

Répondre

0

Vous View est fortement typé à Project.Models.RegisterViewModel cependant, vous ajoutez vos annotations de données à la Objet utilisateur

En général, vous auriez:

public class RegisterViewModel 
{ 
    [Required] 
    [DisplayName("Email Login")] 
    [DataType(DataType.EmailAddress)] 
    [Email(ErrorMessage = "Invalid Email")] 
    public String Email { get; set; } 

    ..... 
    other properties 
} 
+0

N'y a-t-il pas d'autre moyen que de supprimer mon objet 'User'. –

+0

Non, il n'y a pas d'autre moyen. C'est vraiment ce qu'un ViewModel est censé être. Un groupe de propriétés qui correspond aux données de votre vue et agit comme un niveau d'abstraction entre vos entités et votre interface utilisateur. Je recommande d'utiliser quelque chose comme AutoMapper pour rendre cela plus facile. – Paul