web-dev-qa-db-fra.com

Html.EditorFor <> équivalent pour afficher des données en lecture seule?

J'utilise actuellement la méthode Html.EditorFor <> pour générer des champs de l'éditeur, mais j'aimerais utiliser quelque chose de similaire pour afficher les informations de champ dans un format en lecture seule tel qu'une page de détail, c'est-à-dire une étiquette avec le nom du champ suivi d'un étiquette avec la valeur du champ.

Existe-t-il actuellement un équivalent dans MVC pour générer cela? Ou vais-je devoir créer un assistant personnalisé?

Merci d'avance.

Edit: Je connais DisplayFor et LabelFor. Est-il simplement nécessaire de les combiner manuellement?

17
StrictlySocial

Il se peut que je manque quelque chose, mais ne pouvez-vous pas simplement utiliser Html.LabelFor?

Modifier: Peut-être une combinaison utilisant Html.LabelFor et Html.DisplayFor

4
Manatherin

Utilisation 

<%= Html.DisplayFor(model => model.Property) %>

Ou si vous voulez voir une zone de texte en lecture seule (désactivée) 

<%= Html.TextBoxFor(model => model.Property, new { disabled="disabled", @readonly = "readonly" })%>
35
zihotki
4
James Gaunt

MVC 5, exemple Bootstrap 3.

<div class="col-md-6">
    @Html.LabelFor(m => m.UserModel.company, htmlAttributes: new {@class = "control-label tc-label"})
    @Html.EditorFor(m => m.UserModel.company, new {htmlAttributes = new { disabled = "disabled", @readonly = "readonly", @class = "form-control col-md-6"}})
    @Html.ValidationMessageFor(m => m.UserModel.company, "", new {@class = "text-danger"})
</div>
3
GGleGrand

J'ai un contrôle de zone de texte qui est lié à une propriété du modèle. Cependant, j'ai un curseur JQueryUI que j'utilise pour renseigner la valeur, plutôt que de le laisser modifier directement par l'utilisateur. Par conséquent, je veux que cette valeur soit en lecture seule, mais toujours liée au modèle. Je ne peux pas appliquer d'attributs HTML à l'aide de Html.EditorFor (...), je peux utiliser le Html.TextboxFor (... ) méthode. Cependant, si je règle l'attribut HTML "disabled" sur une valeur "disabled" (selon la solution de zihotki), le framework MVC par défaut ne lie pas la valeur de la zone de texte à la propriété bound du modèle lors de la publication. à la méthode du contrôleur (voir Model Binding With Disabled Textbox ). Ma solution consistait à utiliser Html.TextboxFor et à définir only l'attribut readonly, 

@Html.TextBoxFor(model => model.MyProperty, new { @readonly = "readonly" })

puis ajoutez une entrée CSS pour input: readonly pour griser les cases en lecture seule:

input:read-only
{
    background-color: #E6E6E6;
}
3
Andy Thomas

Créez un modèle EditorFor qui retourne une chaîne plutôt qu'un champ de formulaire. Ensuite, utilisez UIHint

Par exemple. Ceci est un modèle StringReadOnly EditorFor

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %><%:ViewData.TemplateInfo.FormattedModelValue.ToString()%>

Dans le modèle 

[UIHint("StringReadOnly")]public string NoChangeMe {get;set}

Ensuite, vous pouvez simplement appeler le champ avec EditorFor et il produira une chaîne.

Bien sûr, le champ n’a pas été soumis, mais c’est ce que je voulais.

0
GraemeMiller