Как установить значение по умолчанию с 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 (строка, объект) сейчас?

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

Ответы:

354

ты можешь попробовать это

<%= Html.TextBoxFor(x => x.Age, new { @Value = "0"}) %>
Tassadaque
источник
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" }) 
Gokul
источник
21
Для скрытых полей просто используйте @ Html.HiddenFor (m => m.Age, new {@Value = "12"})
Buginator
хороший @ Html.HiddenFor (m => m.Age, new {@Value = "12"}) не работает
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");
}
dcompiled
источник
Скорее всего, это ошибка MVC или функция, так как Html.PasswordFor (m => m.Password, new {class = "form-control", value = "default" отображается почти в том же html, и "default" идет чтобы значение отображалось успешно. Например, значение = Model.Email работает, но значение = ViewBag.Email работает. Таким образом, этот принятый ответ лучше и чище, не так хакерски.
ZZZ

Что такое Instructor?
Чаба Тот

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" установит значение по умолчанию для @ 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 равен нулю ... вы получите исключение нулевого указателя, потому что ?? собирается попытаться проверить возвращение ToString ().
eaglei22

@ eaglei22 Nullable <T> .ToString () вернет пустую строку, если значение равно нулю.
Том Линт

спасибо за то, что показали, как смоделировать привязку в анонимном объекте
ничего нет

9

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

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

+1 для указанного параметра , что особенно полезно в копии / pastable коды и один , который использует метод со многими перегрузками
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
Если Age - int, это не сработает; Это должно быть обнуляемым int.
Джастин Сам

0

Попробуйте также, то есть удалить новый {} и заменить его строкой.

<%: Html.TextBoxFor(x => x.Age,"0") %>
Хаммад хан