Html.TextBoxFor ou de formatage Html.EditorFor htmlAttributes?
Je suis un peu perplexe parce que, je veux le format de la valeur et ajouter un attribut html pour la classe css.
Si j'utilise @Html.TextBoxFor(m => m.DateModified)
- Je peux ajouter un attribut html, mais le formatage ne fonctionne pas via DisplayFormat attribut sur le membre.
Si j'utilise @Html.EditorFor(m => m.DateModified)
- Mise en forme des œuvres, mais je ne peux pas ajouter attribut html
Si j'utilise @Html.TextBox("DateModified", Model.DateModified, ...)
- Je le faire référence nulle exception lorsque le Modèle est nulle lorsque le formulaire est en mode d'ajout de
Quelle est la meilleure façon d'atteindre cet objectif?
- Merci pour cette question, j'ai eu peu de diff problème, mais l'explication que vous avez donné à ur question m'a aidé aussi. Ne sais pas tht dans EditoFor méthode, je ne peux pas donner attributs html, et le Modèle de liaison a été de travailler dans moche dans mon cas...merci encore.
Vous devez vous connecter pour publier un commentaire.
J'ai fini par résoudre le problème en créant un éditeur personnalisé de modèle pour mon sélecteur de date, comme ça:
Partagé/EditorTemplates/DateTime.cshtml
Puis, dans ma page d'origine continuent à utiliser
@readonly="readonly"
depuis que j'utilise le jQuery datetime picker - oblige l'utilisateur à choisir une date plutôt que de s'inquiéter de leur taper dans quelque chose de maladroit. Pourrait ne pas être applicable à tout le monde ou toutes les situations, mais cela fonctionne plutôt bien pour moi.additionalViewData
argument, qui semble hacky...date = string.Format("{0}/{1}/{2}", Model.Value.Day, Model.Value.Month, Model.Value.Year);
Vous pourriez...
Utiliser @Html.EditorFor(m => m.DateModified), parce que sinon, le DisplayFormat attribut n'aura aucun effet.
Pour ajouter d'autres attributs comme une classe CSS, vous devez créer un éditeur de modèle pour le type DateTime.
Créer un fichier EditorTemplates/DateTime.cshtml avec le contenu suivant:
Veuillez noter que la valeur de la zone de texte n'est pas défini avec le Modèle directement, mais plutôt avec la TemplateInfo.FormattedModelValue, parce que cette valeur va être mis en forme en fonction de la DisplayFormat attribut tandis que le Modèle non. (Cela m'a pris du temps à réaliser. :))
Dans les cas simples, cela pourrait être suffisant, par exemple, si la classe CSS peut être le même pour tous les éditeurs.
Si vous souhaitez paramétrer l'attribut, vous pouvez le faire aussi bien, en passant la valeur de l'attribut de paramètre à la EditorFor.
Cependant, ce paramètre sera pas magiquement délégué au contrôle HTML comme attribut, mais vous avez à "gérer" dans le modèle de manière explicite. Selon mes expériences, vous pouvez accéder à la valeur de ce paramètre dans le ViewData dans le modèle, de sorte que le paramétrées modèle ressemble à ceci:
Pour prévenir les coder en dur les paires clé/valeur figurant dans EditorFor , convertir le ViewData objet d'un Dictionnaire et dictionnaire objet de zone de texte.
par exemple
Et dans le modèle que vous avez
Pour montrer json date dans la zone de texte (cshtml):