2010-12-16 5 views
0

Wie zeige ich den richtigen DsiplayName in meiner Ansicht unter Berücksichtigung des folgenden Modells.DisplayName-Metadaten werden nicht in der Ansicht angezeigt

<%@ 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; } 


    } 

} 

Das Formular wird nicht angezeigt, „E-Mail-Login“, sondern „UserPrimaryEmail“

+0

möglich Duplikat [Display Metadaten zeigen, nicht auf Ansicht] (http://stackoverflow.com/questions/4456860/displayname-metadata-does-not-show -up-on-view) – SLaks

+0

meine Internetverbindung war vor einiger Zeit langsam. Bitte kennzeichnen Sie den anderen. nicht das. –

Antwort

0

Sie Ansicht stark Project.Models.RegisterViewModel eingegeben wird, aber Sie hinzufügen Ihre Daten Anmerkungen zu den Benutzerobjekt

Im Allgemeinen würden Sie haben:

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

    ..... 
    other properties 
} 
+0

Gibt es keine andere Möglichkeit, dies zu tun, als mein "Benutzer" -Objekt zu verwerfen. –

+0

Nein, es gibt keinen anderen Weg. Dies ist wirklich, was ein ViewModel sein soll. Eine Gruppe von Eigenschaften, die den Daten in Ihrer Sicht entspricht und als Abstraktionsebene zwischen Ihren Entitäten und der Benutzeroberfläche fungiert. Ich empfehle, etwas wie AutoMapper zu verwenden, um dies zu erleichtern. – Paul

Verwandte Themen