Як встановити значення за замовчуванням за допомогою Html.TextBoxFor?


198

Просте запитання, якщо ви використовуєте Html Helper від ASP.NET MVC Framework 1, легко встановити значення за замовчуванням у текстовому полі, оскільки є перевантаження Html.TextBox(string name, object value). Коли я спробував використовувати метод Html.TextBoxFor , першим моїм припущенням було спробувати наступне, яке не вийшло:

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

Потрібно зараз просто дотримуватися Html.TextBox (рядок, об’єкт)?


скористайтеся цим <%: Html.TextBoxFor (x => x.Age, новий {Value = "0"})%>, зробіть невелику зміну V капіталу у Value.
Мохан Сінгх

Відповіді:


354

ви можете спробувати це

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

49
Цікаво дізнатись, чому велика літера «V» працює, а «V» - це не так? Крім того, це рішення перевизначає значення моделі для віку, навіть якщо таке є.
Дерек Хунзікер

74
значення з малим v - ключове слово для C # msdn.microsoft.com/en-us/library/x9fsa0sw.aspx . Тож я думаю, ось чому це не працює.
Tassadaque

3
Відкликав коментар, тому що один заступник за відповідь на цю незрозумілу та проникливу здався ... недостатнім.
ehdv

9
Досі цікаво, що @value не працює. readonly - це також ключове слово для C #, але @readonly працює без проблем.
Дієго

16
Джерелом html у браузері є <input Value = "0" id = "Age" name = "Age" type = "text" value = "" /> при використанні @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, новий {@Value = "12"})
Buginator

хороший @ Html.HiddenFor (m => m.Age, новий {@Value = "12"}) не wokring
RollerCosta

І чому б ви ховали таке жорстке кодове значення за замовчуванням, як це? без сенсу
Антуан Пелтьє,

31

Виявляється, якщо ви не вказали Model на метод View у своєму контролері, він не створить для вас об'єкт зі значеннями за замовчуванням.

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

Швидше, це помилка або функція MVC, оскільки Html.PasswordFor (m => m.Password, new {class = "form-control", value = "default" перетворюється майже в той самий html, а "default" - йде Наприклад, значення = успішно відображається. Наприклад, value = Model.Email працює, але value = ViewBag.Email працює, тому ця прийнята відповідь є кращою та чіткішою, не такою, що хакує.
ZZZ

Що таке Instructor?
Csaba Toth

20

Значенням за замовчуванням буде значення вашої Model.Ageвласності. У цьому і полягає вся суть.


3
Здається, це погана ідея, коли модель управляє значеннями за замовчуванням. Що робити, коли для однієї колекції модельних елементів потрібні різні значення за замовчуванням?
RredCat

@RredCat Погодився, це замулює розділення шару інтерфейсу користувача
Еван М

18

Ви можете просто зробити:

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

або краще, це переключиться на значення за замовчуванням '0', якщо модель недійсна, наприклад, якщо у вас однаковий вигляд і для редагування, і для створення:

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

11

value = "0" встановить значення defualt для @ 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" })

якщо вік є нульовим .. ви збираєтеся отримати виключення з нульовим вказівником, оскільки ?? буде намагатися перевірити повернення ToString ().
eaglei22

@ eaglei22 Nullable <T> .ToString () поверне порожню рядок, якщо значення є нульовим.
Том Лінт

дякую, що показали, як моделювати
ніщо

9

Ця робота для мене

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

+1 для названого параметра, який особливо корисний для копіювального / вставного коду, і той, який використовує метод з багатьма перевантаженнями
Ekus

8

Використання @Value- це хак, оскільки він видає два атрибути, наприклад:

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

Ви повинні зробити це замість цього:

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

7

це працювало для мене, таким чином ми встановлюємо значення за замовчуванням на порожній рядок

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

2
Хоча цей код може відповісти на питання, було б краще включити деякий контекст, пояснивши, як він працює і коли ним користуватися. Відповіді, що стосуються лише коду, в довгостроковій перспективі не корисні.
Боно

@Bono додав кілька коментарів
eric_eri

5

Якщо у вас є форма часткової сторінки як для редагування, так і для додавання, то фокус, який я використовую для значення за замовчуванням, 0полягає в тому, щоб зробити наступне:

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

Таким чином воно буде, 0якщо не встановлено, чи фактичний вік, якщо він існує.


1
Якщо вік є цілим, це не спрацює; Це повинно бути нульовим int.
Самості Джастін

0

Спробуйте також, що видаліть новий {} і замініть його рядком.

<%: Html.TextBoxFor(x => x.Age,"0") %>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.