Html.TextBoxForでデフォルト値を設定する方法


198

簡単な質問です。ASP.NETMVC Framework 1のHtml Helperを使用する場合、オーバーロードがあるため、テキストボックスにデフォルト値を設定するのは簡単ですHtml.TextBox(string name, object value)Html.TextBoxForを使用しようとしたときメソッド、私の最初の推測は、機能しない次のことを試してみることでした:

<%: Html.TextBoxFor(x => x.Age, new { value = "0"}) %>

とりあえずHtml.TextBox(string、object)を使い続けるべきでしょうか?


この<%:Html.TextBoxFor(x => x.Age、new {Value = "0"})%>を使用して、ValueにV資本を少し変更します。
Mohan Singh

回答:


354

あなたはこれを試すことができます

<%= Html.TextBoxFor(x => x.Age, new { @Value = "0"}) %>

49
大文字の「V」が機能し、小文字の「V」が機能しない理由を知りたいですか?また、このソリューションは、存在する場合でも、Ageのモデル値をオーバーライドします。
Derek Hunziker、2009

74
小さなvの値はC#msdn.microsoft.com/en-us/library/x9fsa0sw.aspxのキーワードです。だから私はそれがうまくいかない理由だと思います。
タサダケ

3
この曖昧で洞察に満ちた回答への賛成投票が...不十分であったため、コメントを賛成しました。
ehdv

9
@valueが機能しないのはまだ不思議です。readonlyもC#のキーワードですが、@ readonlyは問題なく機能します。
ディエゴ

16
@Valueを使用する場合、ブラウザのHTMLソースは<input Value = "0" id = "Age" name = "Age" type = "text" value = "" />です。入力タグに「0」を含む「値」と「」を含む「値」の両方があります。
リッキー

59

これはMVC3およびMVC4で機能するはずです。

 @Html.TextBoxFor(m => m.Age, new { @Value = "12" }) 

隠しフィールドにしたい場合

 @Html.TextBoxFor(m => m.Age, new { @Value = "12",@type="hidden" }) 

21
非表示フィールドには、@ Html.HiddenFor(m => m.Age、new {@Value = "12"})を使用するだけ
Buginator

良い1つ@ Html.HiddenFor(m => m.Age、new {@Value = "12"})動作しません
RollerCosta

そして、なぜこのようにハードコードされたデフォルト値を隠すのですか?非感
アントワーヌ・ペルティエ

31

コントローラ内でViewメソッドにModelを指定しない場合、デフォルト値でオブジェクトを作成しないことがわかります。

[AcceptVerbs(HttpVerbs.Get)]
public ViewResult Create()
{
  // Loads default values
  Instructor i = new Instructor();
  return View("Create", i);
}

[AcceptVerbs(HttpVerbs.Get)]
public ViewResult Create()
{
  // Does not load default values from instructor
  return View("Create");
}

Html.PasswordFor(m => m.Password、new {class = "form-control"、value = "default"がほぼ同じhtmlにレンダリングされるため、MVCのバグまたは機能である可能性が高いです。値にビーイングが正常に表示された例では、値は= Model.Emailは動作しますが、値= ViewBag.Emailが作業を行うためので、この受け入れられた答えはそうハッキングではない、より良いときれいです。。。
ZZZ

なにInstructor
Csaba Toth 2016年

20

デフォルト値はModel.Ageプロパティの値になります。それが全体の要点です。


3
モデルがデフォルト値を管理するのは悪い考えのようです。同じモデルアイテムのコレクションに異なるデフォルト値が必要な場合はどうすればよいですか?
RredCat 2010年

@RredCat同意、これはUIレイヤーの分離を汚す
Evan M

18

あなたは単に行うことができます:

<%= Html.TextBoxFor(x => x.Age, new { @Value = "0"}) %>

以上の場合、モデルがnullの場合、たとえば編集と作成の両方に同じビューがある場合、これはデフォルト値「0」に切り替わります。

@Html.TextBoxFor(x => x.Age, new { @Value = (Model==null) ? "0" : Model.Age.ToString() })

11

value = "0"は@ Html.TextBoxforのデフォルト値を設定します

大文字と小文字を区別する「v」は大文字にする必要があります

以下は実際の例です:

@Html.TextBoxFor(m => m.Nights, 
    new { @min = "1", @max = "10", @type = "number", @id = "Nights", @name = "Nights", Value = "1" })

9

ここに私がそれを解決した方法があります。これも編集に使用すると機能します。

@Html.TextBoxFor(m => m.Age, new { Value = Model.Age.ToString() ?? "0" })

Ageがnullの場合は、nullポインタ例外が発生します。ToString()の戻りを確認しようとしています。
eaglei22

@ eaglei22 Nullable <T> .ToString()は、値がnullの場合、空の文字列を返します。
トム・リント

匿名オブジェクトにバインドモデル化する方法を示してくれてありがとう
無価値

9

この仕事は私にとって

@Html.TextBoxFor(model => model.Age, htmlAttributes: new { @Value = "" })

コピー/貼り付け可能なコードで特に役立つ名前付きパラメーターと、多くのオーバーロードを持つメソッドを使用するパラメーターの+1
Ekus

8

次のような@Value2つの属性を出力するため、使用はハックです。

<input type="..." Value="foo" value=""/>

代わりにこれを行う必要があります。

@Html.TextBox(Html.NameFor(p => p.FirstName).ToString(), "foo")

7

これは私にとってはうまくいきました、このようにしてデフォルト値を空の文字列に設定しました

@Html.TextBoxFor(m => m.Id, new { @Value = "" })

2
このコードは質問に答える可能性がありますが、それがどのように機能し、いつ使用するかを説明するコンテキストを含めることをお勧めします。コードのみの回答は、長期的には役に立ちません。
Bono

@Bonoがいくつかのコメントを追加しました
eric_eri

5

編集と追加の両方のための部分的なページフォームがある場合、私がデフォルト値に使用するトリック0は次のようにすることです:

@Html.TextBox("Age", Model.Age ?? 0)

そう0すれば、設定されていない場合、または存在する場合は実際の年齢になります。


1
Ageがintの場合、それは機能しません。null可能なintである必要があります。
ジャスティンセルフ

0

これも試してください。新しい{}を削除して、文字列に置き換えます。

<%: Html.TextBoxFor(x => x.Age,"0") %>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.