0

Ich bin wie unten eine Schleife mit einem Etikett und Editor für jede Eigenschaft auf einem View-Modell zu machen:Warum stören meine Anzeigenamen Etiketten in einer Editorvorlage?

@{ 
    var properties = ViewData.ModelMetadata.Properties.Where(pm => pm.ShowForEdit && !pm.IsComplexType && !ViewData.TemplateInfo.Visited(pm)); 
} 
    @foreach (var prop in properties) 
    { 
     <li> 
      <div class="form-line"> 
       @{ 
     if (prop.HideSurroundingHtml) 
     { 
        @Html.Editor(prop.DisplayName ?? prop.PropertyName) 
     } 
     else 
     { 
        @Html.Label((prop.IsRequired ? "* " : "") + (prop.DisplayName ?? prop.PropertyName)) 
        @Html.Editor(prop.PropertyName) 
     } 
       } 
      </div> 
     </li> 
    } 

und das Modell:

[Required] 
    [Display(Name = "Status")] 
    [UIHint("DropDown", "MVC", "SelectListName", "StatusSelectList")] 
    public Guid StatusId { get; set; } 

    [Required] 
    [Display(Name = "Emp Number")] 
    public string RefNum { get; set; } 

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

Wenn ich einen Anzeigenamen "verwenden Emp. Nr. ", Ein Label wird überhaupt nicht gerendert. Wenn ich den Anzeigenamen "Emp. Number" verwende, wird nur ein "Number" -Label gerendert. Nur wenn ich den Anzeigenamen "Emp Number" ohne jeden Punkt verwende, wird mein vollständiges, erwartetes Label gerendert. Was geht hier vor sich?

+1

was schleifen Sie durch? die Metadaten? – RPM1984

+0

@ RPM1984 Ja. Bitte sehen Sie jetzt Ich habe die Abfrage für 'Eigenschaften' zu meinem Code oben hinzugefügt. – ProfK

+0

okay, ich habe das noch nie zuvor gesehen. Warum willst du das machen? Was versuchst du zu erreichen? Es sieht ziemlich unordentlich aus – RPM1984

Antwort

1

Sie verwenden die falsche Überladung des Html.Label Helpers. Das erste Argument repräsentiert einen Ausdruck, der auf den Editor zeigt, so dass das Attribut for auf das entsprechende Eingabefeld zeigt. Mit dem zweiten Argument können Sie den Beschriftungstext festlegen. Versuchen Sie so:

@Html.Label(prop.PropertyName, (prop.IsRequired ? "* " : "") + (prop.DisplayName ?? prop.PropertyName)) 
+0

Ya, danke @Darin. Dies wird ziemlich zum Crashkurs bei der HTML-Generierung in MVC3. – ProfK

Verwandte Themen