web-dev-qa-db-ja.com

ASP.NET MVC 3:「名前」属性をTextBoxForでオーバーライド

Html.TextBoxForを使用して名前属性をオーバーライドすることは可能ですか?

私は成功しませんでした。クライアント側の検証を機能させるにはTextBoxForを使用する必要がありますが、入らない理由のために、生成されたものとは異なるテキストボックスの名前が必要です。

私は次を試しました:

@Html.TextBoxFor(x => x.Data, new { name = Model.Key + "_Data", id = Model.Key + "_Data" })

IDでは機能しますが、名前では機能しません。これは可能ですか?

更新:TextBoxForのコードを調べます。簡単な方法があるようには見えません。誰かが私を間違っていることを証明できるといいのですが。

90

ロブ、実際にはもっと簡単な方法があります。 nameの代わりに、Nameを使用します。

@Html.TextBoxFor(x => x.Data, new { Name = Model.Key + "_Data", id = Model.Key + "_Data" })
216
anar khalilov

名前にプレフィックスを適用するため、これを求めていますか?その場合、ViewData.TemplateInfo.HtmlFieldPrefixコントローラー。

Brad Wilsonのブログ からこのことについて多くのことを学びました。

40
James McCormack

EditorForには、name属性をパラメーターとして指定できるオーバーロードがあります。

 @Html.EditorFor(expression, null, name)
13
Protector one

EditorFor を試してください。プロパティタイプが文字列でない場合でもテキストボックスがレンダリングされるようにする場合は、テンプレート名として文字列を渡すことができます。プロパティがすでに文字列の場合、テキストボックスをレンダリングするためにtemplatenameを明示的に必要としないため、nullを渡すことができます。 idパラメータを明示的に必要とせず、要素名から推測することに注意してください。そして、すべての検証はEditorForでまだアクティブです

 @Html.EditorFor(x => x.Data, "string", Model.Key + "_Data")
8
archil

ベンの答えは、あなたがHtml.Rawでラップする必要があることを除いて、私が探していたものを得ました

@Html.Raw(Html.TextBoxFor(x => x.Data).ToString().Replace("Data", "NewData"))
7
Rip Ryness

少し「unpretty」=)、試してください:

@Html.TextBoxFor(x => x.Data).ToString().Replace("Data", "NewData")
3
benwasd

これはMicrosoftの呼び出しです[〜#〜] gotcha [〜#〜]

このように名前を大文字で使用してください

@Html.TextBoxFor(m => m.Reply.Answer, new {@Name="Whatyouwant"})
3
Ali Adravi

私にとっては、うまくいきます!お役に立てば幸いです!

@Html.EditorFor(model => model.Nome, new { htmlAttributes = new { @class = "form-control", @maxlength = "80", @id = "NomeFilter", @Name = "NomeFilter" } })
1
Jonas
@Html.EditorFor(Model => Model.Something, "name", "name", new {@class = "form-control" })

中央にあるこれらの2つの文字列パラメーターのどちらが機能するかはわかりませんが、両方を入力したときにのみ機能しました。

1
Mr.Ajdos

この例では、権限に基づいてフォームフィールドを無効にしましたが、それでも表示していました。値をコントローラーに送信するための非表示フィールドがありましたが、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" /> 
0
ScottLenart

シンプルにしましょう。すでにIDを提供しているので、「TextBoxFor」の代わりに「TextBox」メソッドを使用できれば、クライアント側とサーバー側で問題なく動作します。さらに、受け入れられた回答は機能しますが、ブラウザを使用して検査すると、タグに重複した名前属性が生成されます。以下のソリューションにはその問題はありません。

MvcHtmlString Html.TextBox(文字列名、文字列値、オブジェクトhtmlAttributes)

@Html.TextBox(Model.Key + "_Data", Model.Key, new { id = Model.Key + "_Data" }
0
TroySteven