0

Ich bin stecken versucht, herauszufinden, warum meine Vorlage nicht gerendert oder gefunden (wie Haltepunkte auf Vorlage nicht getroffen werden). Ich habe ein Modell wie dies bekommt:ASP.NET MVC nicht finden/mit benutzerdefinierten Typ Editor-Vorlage

public class SomeModel 
{ 
    public Dropdown Cities { get; set; } 
} 

in dieser Ansicht verwendet

@model Mvc.Models.SomeNamespace.SomeModel 
@{ 
    Layout = "../Shared/_Site.cshtml"; 
} 

@Html.ValidationSummary(true) 

@using (Html.BeginForm()) 
{ 
    @Html.EditorForModel() 

    <input type="submit" value="Continue"> 
} 

wo die Dropdown-Objektdefinition

public class Dropdown 
{ 
    public int SelectedValue { get; set; } 

    public IEnumerable<SelectListItem> Values { get; set; } 

    public string Placeholder { get; set; } 
} 

ist ich eine Editor Vorlage für Dropdown erstellt habe unter Ansichten/Geteilt/EditorTemplates/Dropdown.cshtml

@model Mvc.ViewModels.Dropdown 

@Html.DropDownListFor(model => model.SelectedValue, Model.Values, Model.Placeholder) 

Die schockierende Sache für mich ist, dass ich auch DateTime.cshtml Vorlage unter diesem Pfad habe, die gut funktioniert.

Jede Eigenschaft auf dem Modell, außer denen des Dropdown-Typs wird gerendert, sogar die DateTime-Dateien mit ihrer benutzerdefinierten Vorlage.

Bin mir etwas nicht bewusst?

BEARBEITEN: Bereits versucht mit [UIHint ("Dropdown")] auf Städte Eigenschaft.

EDIT2: versuchte DropdownViewModel

+0

Nicht verwandt, aber alles was es sein muss, ist '@ Html.DropDownListFor (m => SelectedValue, Model.Values, Model.Placeholder)' - es muss kein zweites identisches 'IEnumerable ' erstellt werden die erste –

+0

@StephenMuecke Danke, jede Abkürzung wird geschätzt :) –

+0

Related: [Wiederverwendbare Editor-Vorlage mit DropDownList für Business-Objekte] (http://Stackoverflow.com/q/6744432/181087) – NightOwl888

Antwort

2

von Standardvorlagen Umbenennung Rekursion nicht nach unten in verschachtelte komplexe Objekte. Wenn Sie dies wollen, passieren Sie immer dieses Standardverhalten außer Kraft setzen könnte durch eine ~/Shared/EditorTemplates/Object.cshtml mit folgendem Inhalt zu erstellen:

@if (ViewData.TemplateInfo.TemplateDepth > 1) 
{ 
    @ViewData.ModelMetadata.SimpleDisplayText 
} 
else 
{ 
    foreach (var prop in ViewData.ModelMetadata.Properties.Where(pm => pm.ShowForEdit && !ViewData.TemplateInfo.Visited(pm))) 
    { 
     if (prop.HideSurroundingHtml) 
     { 
      @Html.Editor(prop.PropertyName) 
     } 
     else 
     { 
      if (!String.IsNullOrEmpty(Html.Label(prop.PropertyName).ToHtmlString())) 
      { 
       <div class="editor-label">@Html.Label(prop.PropertyName)</div> 
      } 
      <div class="editor-field"> 
       @Html.Editor(prop.PropertyName) 
       @Html.ValidationMessage(prop.PropertyName, "*") 
      </div> 
     } 
    } 
} 

Sie können in this blog post mehr über die Standardvorlagen in ASP.NET MVC lesen.

+0

Funktioniert wie ein Charme, wusste nicht, dass es verschachtelte komplexe Objekte standardmäßig nicht unterstützt. –

+0

Ohne Bezug, da mein Beispiel mit aktiviertem ValidationSummary arbeitet, ist es vorzuziehen, @ Html.ValidationMessage (prop.PropertyName) zu verwenden, anstatt den zweiten "*" Parameter hinzuzufügen, damit die Datenanmerkungen richtig funktionieren. –

+0

Hallo Darin, SimpleDisplayText Noch nicht hinzugefügt .Net Kern 2! Würden Sie bitte Ihre Antwort aktualisieren? –

Verwandte Themen