MVC3 Razor Html.TextBoxFor: Kann ich es machen das Multi-Line wie TextAreaFor?
Ich habe schon gesehen, dieser Beitrag: Ändern der Größe von Html.TextBox
Aber ich kann nicht ändern, zu Html.TextAreaFor()
weil Sie nicht über ein Attribut für mich einen dynamischen Standardwert (ich mache eine Seite Bearbeiten möchte ich dynamisch füllen Sie die Felder der aktuellen Daten, die dann modifiziert werden). Ich kann auch nicht scheinen, um die "EditorFor" zu arbeiten, auch wenn ich auf die [DataType(DataType.MultilineText)]
in meinem viewmodel (alle es tut, es scheinen, zu ändern, zu textboxfor und mein Standard-Werte nicht auftauchen).
Meiner Ansicht Bearbeiten wird ein viewmodel enthält zwei Modelle, ein leeres Formular (OfferForm
) gefüllt werden mit den angezeigten Feldern, und die offer
Modell mit den aktuellen Daten. Ich möchte die Textfelder für die OfferForm
und dynamisch füllen Sie mit dem Inhalt der offer
Modell die Daten.
Hier ist mein 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>
Gibt es eine Möglichkeit ein " multiline
" - Attribut in der Html.TextBoxFor()
?
- Warum sind Sie auf der Suche um die
value
Eigenschaft. Im Fall der text-Bereich dervalue
ist, was sich innerhalb des html-Elemente. Für Ihre Beispiele, die Sie nicht benötigen, um die value-Eigenschaft entweder dieTextBoxFor
oder dieTextAreaFor
als wenn Sie dieHtml.*
Helfer es füllt automatisch den Wert. - Der Grund, ich brauche, um die
Value
ist denn der Wert ist nicht gefüllt, aus dem Modell, für das ich bin mitTextBoxFor
oderTextAreaFor
(ie. die leere OfferForm). Stattdessen ist er bevölkert von einem zweiten Modell in meinem ViewModel (ie. die Bieten). - Ah, ich sehe. sehr subtile Namensgebung Unterschied.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den einfachsten Weg zu gehen wäre, um erstellen Sie eine Html-Erweiterung Methode wie im folgenden
Könnte man dann so nennen:
Unterstützt nur die grundlegenden features und was nicht. Die tatsächlichen tag-generation gezogen wurde von Mvc3-Quelle, mit geringfügigen änderungen zu unterstützen, übergeben Sie den Wert in. Diese sollten für die meisten Fälle aus, aber könnten Sie benötigen, um mehr hinzuzufügen außer Kraft setzen. Das ist nicht sehr...sauber, aber sollten Sie loslegen. 🙂
Um die Erweiterung zu zeigen, bis in Ihrem razor-Ansichten, die Sie Bearbeiten
Web.config
innerhalb des Views directory und fügen Sie den namespace (nicht der name der Klasse), wo Sie in dieser Klasse. Es sollte sich dann zeigen, bis in 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
können Sie es entfernen. Ich benutze Sie die ganze Zeit so, ich wollte sichergehen, dass es war für andere da.Müssen Sie feststellen, dass HTML-Elemente sind nicht windows-Steuerelemente, die Sie nur anzeigen zu Sie etwas.
HTML-Elemente haben, um cross-Plattform, und es gibt keine Garantie, dass eine textarea ist nur ein multi-line textbox auf allen Plattformen, also so weit wie HTML handelt sich um ein Textfeld und eine textarea sind zwei verschiedene Dinge.
Also die Antwort ist Nein, denn es gibt keine multiline-Attribut für eine textbox in HTML.