2010-10-27 5 views
12

Je cherche à créer un modèle d'éditeur pour Object.cshtml afin de modifier le comportement de la méthode Html.EditorForModel(). Je ne trouve aucun exemple de cela en utilisant Razor. J'ai vu this example en utilisant le moteur de vue MVC2 et WebForm mais je ne sais pas assez sur le rasoir pour le convertir. Même un exemple simple serait très utile.Création d'un modèle d'éditeur object.cshtml avec MVC et Razor

Répondre

21

Je vais juste faire le modèle d'affichage et laisser le reste comme un exercice pour le lecteur :)

@if (Model == null) { 
    <text>@ViewData.ModelMetadata.NullDisplayText</text> 
} else if (ViewData.TemplateInfo.TemplateDepth > 1) { 
    <text>@ViewData.ModelMetadata.SimpleDisplayText</text> 
} else { 
    <table cellpadding="0" cellspacing="0" border="0"> 
    @foreach (var prop in ViewData.ModelMetadata.Properties.Where(pm => pm.ShowForDisplay && !ViewData.TemplateInfo.Visited(pm))) { 
     if (prop.HideSurroundingHtml) { 
      <text>@Html.Display(prop.PropertyName)</text> 
     } else { 
      <tr> 
       <td> 
        <div class="display-label" style="text-align: right;"> 
         @prop.GetDisplayName() 
        </div> 
       </td> 
       <td> 
        <div class="display-field"> 
         @Html.Display(prop.PropertyName) 
        </div> 
       </td> 
      </tr> 
     } 
    } 
    </table> 
} 
+0

Merci pour cela, mais quand je coller ce code dans mon object.cshtml je reçois « erreur CS1024: préprocesseur dire ctive attendu " – Craig

+2

Doh, votre code est correct. J'ai accidentellement eu # Html.EditorForModel() plutôt que @ Html.EditorForModel(). Au moins, votre code n'est pas perdu et sera vu par de nombreux nouveaux utilisateurs de Razor à l'avenir. – Craig

+0

Je n'arrive même pas à exécuter Object.cshtml. Je l'ai placé dans Views/Shared/EditorTemplates/Object.cshtml Des idées? –

0

Cela semble fonctionner pour éditeur de modèle pour bootstrap, s'il vous plaît laissez-moi savoir de toute amélioration

Object.cshtml

@if (Model == null) 
{ 
    <text>@ViewData.ModelMetadata.NullDisplayText</text> 
} 
else if (ViewData.TemplateInfo.TemplateDepth > 1) 
{ 
    <text>@ViewData.ModelMetadata.SimpleDisplayText</text> 
} 
else 
{ 
    foreach (var prop in ViewData.ModelMetadata.Properties.Where(pm => pm.ShowForDisplay && !ViewData.TemplateInfo.Visited(pm))) 
    { 
     if (prop.HideSurroundingHtml) 
     { 
      <text>@Html.Editor(prop.PropertyName)</text> 
     } 
     else 
     { 
      <div class="form-group"> 
       @Html.Label(prop.PropertyName, new { @class = "control-label col-md-2", @style = "text-align:right;" }) 
       <div class="col-md-10"> 
        @Html.Editor(prop.PropertyName, null, new { @class = "form-control " }) 
        @Html.ValidationMessage(prop.PropertyName, "", new { @class = "text-danger" }) 
       </div> 
      </div> 
     } 
    } 
} 
Questions connexes