Html.TextBoxFor
を使用して名前属性をオーバーライドすることは可能ですか?
私は成功しませんでした。クライアント側の検証を機能させるにはTextBoxForを使用する必要がありますが、入らない理由のために、生成されたものとは異なるテキストボックスの名前が必要です。
私は次を試しました:
@Html.TextBoxFor(x => x.Data, new { name = Model.Key + "_Data", id = Model.Key + "_Data" })
IDでは機能しますが、名前では機能しません。これは可能ですか?
更新:TextBoxForのコードを調べます。簡単な方法があるようには見えません。誰かが私を間違っていることを証明できるといいのですが。
ロブ、実際にはもっと簡単な方法があります。 nameの代わりに、Nameを使用します。
@Html.TextBoxFor(x => x.Data, new { Name = Model.Key + "_Data", id = Model.Key + "_Data" })
名前にプレフィックスを適用するため、これを求めていますか?その場合、ViewData.TemplateInfo.HtmlFieldPrefix
コントローラー。
Brad Wilsonのブログ からこのことについて多くのことを学びました。
EditorForには、name
属性をパラメーターとして指定できるオーバーロードがあります。
@Html.EditorFor(expression, null, name)
EditorFor を試してください。プロパティタイプが文字列でない場合でもテキストボックスがレンダリングされるようにする場合は、テンプレート名として文字列を渡すことができます。プロパティがすでに文字列の場合、テキストボックスをレンダリングするためにtemplatename
を明示的に必要としないため、null
を渡すことができます。 idパラメータを明示的に必要とせず、要素名から推測することに注意してください。そして、すべての検証はEditorForでまだアクティブです
@Html.EditorFor(x => x.Data, "string", Model.Key + "_Data")
ベンの答えは、あなたがHtml.Rawでラップする必要があることを除いて、私が探していたものを得ました
@Html.Raw(Html.TextBoxFor(x => x.Data).ToString().Replace("Data", "NewData"))
少し「unpretty」=)、試してください:
@Html.TextBoxFor(x => x.Data).ToString().Replace("Data", "NewData")
これはMicrosoftの呼び出しです[〜#〜] gotcha [〜#〜]
このように名前を大文字で使用してください
@Html.TextBoxFor(m => m.Reply.Answer, new {@Name="Whatyouwant"})
私にとっては、うまくいきます!お役に立てば幸いです!
@Html.EditorFor(model => model.Nome, new { htmlAttributes = new { @class = "form-control", @maxlength = "80", @id = "NomeFilter", @Name = "NomeFilter" } })
@Html.EditorFor(Model => Model.Something, "name", "name", new {@class = "form-control" })
中央にあるこれらの2つの文字列パラメーターのどちらが機能するかはわかりませんが、両方を入力したときにのみ機能しました。
この例では、権限に基づいてフォームフィールドを無効にしましたが、それでも表示していました。値をコントローラーに送信するための非表示フィールドがありましたが、EditorForで別のフィールド名が必要でした。モデル値の後の最初のパラメータは「名前」プロパティを表し、2番目は新しい名前です。
@Html.EditorFor(m => m.UserName, "name", "UserNameDisabled", new { htmlAttributes = new { @class = "form-control", @disabled = "disabled"} });
結果:
<input class="form-control text-box single-line" disabled="disabled" id="UserNameDisabled" name="UserNameDisabled" type="text" value="someEnteredValue" />
シンプルにしましょう。すでにIDを提供しているので、「TextBoxFor」の代わりに「TextBox」メソッドを使用できれば、クライアント側とサーバー側で問題なく動作します。さらに、受け入れられた回答は機能しますが、ブラウザを使用して検査すると、タグに重複した名前属性が生成されます。以下のソリューションにはその問題はありません。
MvcHtmlString Html.TextBox(文字列名、文字列値、オブジェクトhtmlAttributes)
@Html.TextBox(Model.Key + "_Data", Model.Key, new { id = Model.Key + "_Data" }