MVC3 Rasoir Html.TextBoxFor: puis-je faire en Multi-Ligne, comme TextAreaFor?
J'ai déjà vu ce post: Modification de la taille de Html.Zone de texte
Mais je ne peux pas changer de Html.TextAreaFor()
parce qu'il ne dispose pas d'un attribut pour moi d'établir une dynamique de la valeur par défaut (je suis en train de modifier la page que je veux pour remplir dynamiquement dans les domaines de l'actuel des données qui peuvent ensuite être modifiés). Je ne peux pas sembler obtenir le EditorFor de travail, même si je change de [DataType(DataType.MultilineText)]
dans mon viewmodel (tout ce qu'il fait, il semble changer de textboxfor et mes valeurs par défaut ne s'affichent pas).
Mon montage de vue, dans un viewmodel contenant deux modèles, un formulaire vide (OfferForm
) à être remplis avec les champs à l'écran, et le offer
modèle contenant les données actuelles. Je veux avoir des objets textfield pour la OfferForm
, et de manière dynamique les remplir avec le contenu de la offer
les données du modèle.
Voici mon code html:
<div class="InLine">
<div class="InLine editor-label-container">
<div class="editor-label">
@Html.LabelFor(model => model.OfferForm.Description)
</div>
</div>
<div class="InLine editor-field-container">
<div class="editor-field">
@Html.TextBoxFor(model => model.OfferForm.Description, new { @Value = @Html.DisplayFor(model => model.Offer.Description)})
@Html.ValidationMessageFor(model => model.Offer.Description)
</div>
</div>
</div>
<div class="InLine">
<div class="InLine editor-label-container">
<div class="editor-label">
@Html.LabelFor(model => model.OfferForm.SMSText)
</div>
</div>
<div class="InLine editor-field-container">
<div class="editor-field">
@Html.TextBoxFor(model => model.OfferForm.SMSText, new { @Value = @Html.DisplayFor(model => model.Offer.SmsText)})
@Html.ValidationMessageFor(model => model.Offer.SmsText)
</div>
</div>
</div>
Est-il un moyen de définir un "multiline
" attribut dans la Html.TextBoxFor()
?
- Pourquoi cherchez-vous à définir la
value
de la propriété. Dans le cas de la zone de texte de lavalue
est ce qui est contenu dans les éléments html. Quant à vos exemples, vous n'avez pas besoin de définir la valeur de la propriété, soit laTextBoxFor
ou laTextAreaFor
que lorsque vous utilisez laHtml.*
helper il remplit automatiquement la valeur. - La raison j'ai besoin de régler le
Value
est parce que la valeur n'est pas renseignée à partir du Modèle pour lequel je suis à l'aide deTextBoxFor
ouTextAreaFor
(ie. le vide OfferForm). Au lieu de cela, il est rempli à partir d'un second Modèle dans mon ViewModel (ie. l'Offre). - Ah, je vois. très subtile différence d'appellation.
Vous devez vous connecter pour publier un commentaire.
La façon la plus simple de procéder serait de créer une extension Html méthode comme suit
Vous pouvez ensuite appeler:
Il prend uniquement en charge les fonctionnalités de base et ce n'est pas. Le réel de l'étiquette de génération a été tiré à partir de Mvc3 source avec de légères modifications en charge la transmission de la valeur. Cela devrait fonctionner pour la plupart des cas, mais vous pourriez avoir besoin d'ajouter plus de remplacements. Ce n'est pas très...propre, mais devrait vous permettre de continuer. 🙂
Pour obtenir l'extension de montrer à l'intérieur de votre rasoir vue de modifier le
Web.config
dans le répertoire de Vues et ajouter le espace de noms (pas le nom de la classe) où vous mettez cette classe. Il devrait alors apparaître dans intellisense.The name 'Value' does not exist in the current context
.@Html.TextAreaFor(model => model.OfferForm.Description, 5, 1, null, Html.DisplayFor(model => model.Offer.Description).ToString())
htmlAttributes
vous pouvez le supprimer. Je les utilise tout le temps donc je voulais m'assurer qu'il était là pour les autres.Vous vous rendez compte que les éléments HTML sont pas commandes de windows, ils ont juste la carte à eux un peu.
Éléments HTML ont à traverser la plate-forme, et il n'y a pas de garantie qu'un textarea est juste une zone de texte multiligne sur toutes les plateformes, donc autant que le HTML est concernée un contrôle textbox et un textarea sont deux choses différentes.
Donc la réponse est non, car il n'y a pas d'attribut multiligne pour une zone de texte en HTML.