2010-12-16 4 views
1

Je souhaite utiliser la même vue partielle pour les vues de création, de modification et de détails, afin d'éviter la duplication de la structure de jeu de champs pour une entité. Puis, en fonction de la vue partielle, je voudrais ajouter une classe de "lecture seule" à une div entourant mon fieldset et gérer rendant les champs d'entrée réels en lecture seule sur le client, en utilisant css ou jQuery, ou peu importe. Comment puis-je spécifier à partir de ma vue Razor que j'ai besoin de cette classe ajoutée à la div "item-details"?Comment rendre un attribut HTML à partir d'une vue Razor

<div class="item-details"> 
    <fieldset> 
     <legend>Product Details</legend> 
     @Html.HiddenFor(model => model.DetailItem.ProductId) 
     <div class="editor-label"> 
      @Html.LabelFor(model => model.DetailItem.Name) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.DetailItem.Name) 
      @Html.ValidationMessageFor(model => model.DetailItem.Name) 
     </div> 
     <p> 
      <input type="submit" value="Save" /> 
     </p> 
    </fieldset> 
</div> 

Répondre

1

Je généralement une variable sur le modèle qui indiquerait si vos données est modifiable, et l'utiliser comme:

<div class="item-details @(Model.IsReadOnly ? "read-only" : "")"> 

Si vous ne l'avez pas sur le modèle cependant vous pouvez utiliser le ViewBag. Selon vous parent:

@{ 
    ViewBag.IsModelReadOnly = true; 
} 

Dans votre vue partielle:

<div class="item-details @(ViewBag.IsModelReadOnly ? "read-only" : "")"> 

Votre sortie html pour une vue en lecture seule serait

<div class="item-details read-only"> 

Vous pouvez ensuite accéder à la div via jQuery et faire ce dont vous avez besoin: $(".read-only")...

0

Pourquoi ne pas simplement utiliser

@ Html.DisplayFor (modèle => modèle. [Quelle propriété vous essayez d'afficher])

Questions connexes