Html.TextBoxFor ile varsayılan bir değer nasıl ayarlanır?


198

Basit bir soru, ASP.NET MVC Framework 1'den Html Helper kullanıyorsanız, aşırı yük olduğundan metin kutusunda varsayılan bir değer ayarlamak kolaydır Html.TextBox(string name, object value). Html.TextBoxFor yöntemini kullanmayı denediğimde , ilk tahminim işe yaramadı aşağıdakileri denemek oldu:

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

Şimdilik sadece Html.TextBox (string, object) ile yapışmalı mıyım?


bu <%: Html.TextBoxFor (x => x.Age, yeni {Value = "0"})%> kullanın, Değer'de küçük bir V sermayesi değişikliği yapın.
Mohan Singh

Yanıtlar:


355

bunu deneyebilirsin

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

49
Sermayenin neden 'V' işe yaradığını ve küçük 'v' harfinin neden işe yaramadığını merak mı ediyorsunuz? Ayrıca, bu çözüm, mevcut olsa bile, Yaş için model değerini geçersiz kılar.
Derek Hunziker

74
küçük v değeri C # msdn.microsoft.com/en-us/library/x9fsa0sw.aspx için anahtar kelimedir . Bence bu neden işe yaramıyor.
Tassadaque

3
Yorumun üstesinden gelindi, çünkü bir cevap için yukarı doğru oy alan bu belirsiz ve anlayışlı görünüyordu ... yetersiz.
ehdv

9
@ Değerinin işe yaramadığını merak ediyor. readonly ayrıca C # için bir anahtar kelimedir, ancak @readonly sorunsuz çalışır.
Diego

16
@Value kullanılırken tarayıcıdaki html kaynağı <input Value = "0" id = "Age" name = "Age" type = "text" value = "" /> şeklindedir. Giriş etiketinde hem "0" ile "Değer" ve "" ile "değer" vardır.
Ricky

59

Bu MVC3 ve MVC4 için çalışmalıdır

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

Gizli bir alan olmasını istiyorsanız

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

21
Gizli alanlar için @ Html.HiddenFor (m => m.Age, yeni {@Value = "12"}) kullanın
Buginator

iyi bir @ Html.HiddenFor (m => m.Age, yeni {@Value = "12"}) wokring değil
RollerCosta

Neden böyle bir sabit kodlu varsayılan değeri gizleyesiniz? mantıklı
Antoine Pelletier

31

Denetleyicinizdeki Görünüm yöntemine Modeli belirtmezseniz, varsayılan değerlerle sizin için bir nesne oluşturmadığı ortaya çıkar.

[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, yeni {class = "form-control", value = "default" hemen hemen aynı html'ye dönüştürüldüğünden ve "default" gittiği için MVC hatası veya özelliği daha olasıdır. Örneğin, value = Model.Email çalışıyor, ancak value = ViewBag.Email çalışıyor.Bu yüzden bu kabul edilen cevap daha iyi ve daha temiz, o kadar hack değil
ZZZ

Nedir Instructor?
Csaba Toth

20

Varsayılan değer, Model.Agemülkünüzün değeri olacaktır . Bütün mesele bu.


3
Model varsayılan değerleri yönettiğinde kötü bir fikir gibi görünüyor. Aynı model öğeleri koleksiyonu için farklı varsayılan değer gerektiğinde ne yapılmalı?
RredCat

@RredCat Kabul etti, bu UI katmanının ayrılmasını çamurluyor
Evan M

18

Sadece şunları yapabilirsiniz:

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

veya daha iyisi, model boşsa, örneğin hem düzenleme hem de oluşturma için aynı görünüme sahipseniz, bu varsayılan değer olan "0" a geçer:

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

11

value = "0" @ Html.TextBoxiçin defualt değerini ayarlayacak

büyük / küçük harfe duyarlı "v" sermaye olmalıdır

Aşağıda çalışan örnek:

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

9

İşte böyle çözdüm. Bu, düzenleme için de kullanırsanız çalışır.

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

Yaş null ise .. bir boş gösterici istisnası alacaksınız çünkü ?? ToString () işlevinin dönüşünü kontrol etmeye çalışacaktır.
eaglei22

@ eaglei22 Nullable <T> .ToString (), değer null olursa boş bir dize döndürür.
Tom Lint

isimsiz nesnede bağlamak modellemek için nasıl gösterdiğin için teşekkür ederiz
nought

9

Bu iş benim için

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

Kopyalama / yapıştırma kodunda özellikle yararlı olan adlandırılmış parametre için +1 ve birçok aşırı yükleme içeren bir yöntem kullanan bir parametre
Ekus

8

Kullanmak @Valuebir hack'tir, çünkü iki öznitelik verir, örneğin:

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

Bunun yerine şunları yapmalısınız:

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

7

bu benim için çalıştı, bu şekilde varsayılan değeri boş dizeye ayarlıyoruz

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

2
Bu kod soruyu cevaplayabilirken, nasıl çalıştığını ve ne zaman kullanılacağını açıklayan bir bağlam eklemek daha iyi olur. Yalnızca kod yanıtları uzun vadede yararlı değildir.
Bono

@Bono bazı yorumlar ekledi
eric_eri

5

Hem düzenleme hem de ekleme için kısmi bir sayfa formunuz varsa, varsayılan değere kullandığım numara 0aşağıdakileri yapmaktır:

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

Bu şekilde 0ayarlanmamışsa veya varsa gerçek yaş olacaktır.


1
Yaş bir int ise, bu işe yaramaz; Null olabilecek bir int olması gerekir.
Justin Self

0

Bunu da deneyin, yani new {} 'i kaldırın ve dizeyle değiştirin.

<%: Html.TextBoxFor(x => x.Age,"0") %>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.