Bagaimana cara menetapkan nilai default dengan Html.TextBoxFor?

198

Pertanyaan sederhana, jika Anda menggunakan Helper Html dari ASP.NET MVC Framework 1 mudah untuk menetapkan nilai default pada kotak teks karena ada kelebihan Html.TextBox(string name, object value). Ketika saya mencoba menggunakan metode Html.TextBoxFor , tebakan pertama saya adalah mencoba yang berikut ini yang tidak berfungsi:

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

Haruskah saya tetap menggunakan Html.TextBox (string, object) untuk saat ini?

dikompilasi
sumber
gunakan ini <%: Html.TextBoxFor (x => x.Age, new {Value = "0"})%>, buat modal perubahan V kecil di Value.
Mohan Singh

Jawaban:

354

Anda bisa mencoba ini

<%= Html.TextBoxFor(x => x.Age, new { @Value = "0"}) %>
Tassadaque
sumber
49
Penasaran ingin tahu mengapa modal 'V' bekerja dan huruf kecil 'v' tidak? Juga, solusi ini mengesampingkan nilai model untuk Umur, bahkan jika ada.
Derek Hunziker
74
nilai dengan v kecil adalah kata kunci untuk C # msdn.microsoft.com/en-us/library/x9fsa0sw.aspx . Jadi saya pikir itu sebabnya tidak berhasil.
Tassadaque
3
Terpilih komentar karena seseorang memilih jawaban yang tidak jelas dan berwawasan ini ... tidak memadai.
ehdv
9
Masih penasaran bahwa @value tidak berfungsi. readonly juga merupakan kata kunci untuk C # tetapi @readonly berfungsi tanpa masalah.
Diego
16
Sumber html di browser adalah <input Value = "0" id = "Age" name = "Age" type = "text" value = "" /> saat menggunakan @Value. Ada "Nilai" dengan "0" dan "nilai" dengan "" di tag input.
Ricky
59

Ini seharusnya berfungsi untuk MVC3 & MVC4

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

Jika Anda menginginkannya menjadi bidang tersembunyi

 @Html.TextBoxFor(m => m.Age, new { @Value = "12",@type="hidden" }) 
Gokul
sumber
21
Untuk bidang tersembunyi, cukup gunakan @ Html.HiddenFor (m => m.Age, {@Value = "12"} baru)
Buginator
bagus @ Html.HiddenFor (m => m.Age, baru {@Value = "12"}) tidak wokring
RollerCosta
Dan mengapa Anda menyembunyikan nilai default kode keras seperti ini? tidak masuk akal
Antoine Pelletier
31

Ternyata jika Anda tidak menentukan Model untuk metode tampilan dalam controller Anda, itu tidak membuat objek untuk Anda dengan nilai-nilai default.

[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");
}
dikompilasi
sumber
Lebih besar kemungkinannya adalah bug atau fitur MVC, karena Html.PasswordFor (m => m.Password, {class = "form-control" baru, value = "default" diterjemahkan ke dalam html yang hampir sama, dan "default" pergi untuk nilai ditampilkan dengan sukses. Misalnya, nilai = Model.Email berfungsi, tetapi nilai = ViewBag.Email berfungsi. Jadi jawaban yang diterima ini lebih baik dan lebih bersih, tidak terlalu peretasan.
ZZZ

Apa Instructor?
Csaba Toth

20

Nilai default akan menjadi nilai Model.Ageproperti Anda . Itulah intinya.


3
Sepertinya itu ide yang buruk ketika model mengelola nilai default. Apa yang harus dilakukan ketika kebutuhan nilai standar yang berbeda untuk koleksi item model yang sama?
RredCat

@RredCat Setuju, ini membingungkan pemisahan lapisan UI
Evan M

18

Anda bisa melakukannya:

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

atau lebih baik, ini akan beralih ke nilai default '0' jika modelnya nol, misalnya jika Anda memiliki tampilan yang sama untuk mengedit dan membuat:

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

11

value = "0" akan menetapkan nilai defualt untuk @ Html.TextBoxfor

peka huruf "v" harus berupa modal

Di bawah ini adalah contoh kerja:

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

9

Inilah cara saya menyelesaikannya. Ini berfungsi jika Anda juga menggunakan ini untuk mengedit.

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

jika Umur nol .. Anda akan mendapatkan pengecualian pointer nol karena ?? akan mencoba untuk memeriksa kembalinya ToString ().
eaglei22

@ eaglei22 Nullable <T> .ToString () akan mengembalikan string kosong jika nilainya nol.
Tom Lint

terima kasih telah menunjukkan bagaimana membuat model mengikat pada objek anonim
tidak ada

9

Ini bekerja untuk saya

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

+1 untuk parameter bernama yang sangat membantu dalam menyalin / kode pastable dan yang menggunakan metode dengan banyak kelebihan
Ekus

8

Penggunaan @Valueadalah peretasan, karena menghasilkan dua atribut, misalnya:

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

Anda harus melakukan ini sebagai gantinya:

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

7

ini bekerja untuk saya, dengan cara ini kita menetapkan nilai default ke string kosong

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

2
Meskipun kode ini dapat menjawab pertanyaan, akan lebih baik untuk memasukkan beberapa konteks, menjelaskan cara kerjanya dan kapan menggunakannya. Jawaban kode saja tidak berguna dalam jangka panjang.
Bono

@Bono menambahkan beberapa komentar
eric_eri

5

Jika Anda memiliki sebagian formulir halaman untuk mengedit dan menambahkan, maka trik yang saya gunakan untuk nilai default 0adalah dengan melakukan hal berikut:

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

Dengan begitu akan menjadi 0jika tidak disetel atau usia aktual jika ada.


1
Jika Age adalah int, itu tidak akan berhasil; Itu harus menjadi int nullable.
Justin Self

0

Coba ini juga, yaitu menghapus {} baru dan menggantinya dengan string.

<%: Html.TextBoxFor(x => x.Age,"0") %>
Hammad Khan