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?


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"}) %>

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" }) 

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");
}

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") %>
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.