Как установить значение по умолчанию с Html.TextBoxFor?

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

13 ответов

Решение

Оказывается, что если вы не укажете метод для метода 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");
}

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

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

Это должно работать для MVC3 и MVC4

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

Если вы хотите, чтобы это было скрытое поле

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

Значением по умолчанию будет значение вашего Model.Age имущество. В этом вся суть.

Вы можете просто сделать:

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

или лучше, это переключится на значение по умолчанию '0', если модель пуста, например, если у вас одинаковое представление как для редактирования, так и для создания:

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

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

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

value="0" установит значение по умолчанию для @Html.TextBoxfor

его чувствительный к регистру "V" должен быть заглавным

Ниже работает пример:

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

Вот как я это решил. Это работает, если вы также используете это для редактирования.

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

Это сработало для меня, таким образом мы устанавливаем значение по умолчанию для пустой строки

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

С помощью @Value это хак, потому что он выводит два атрибута, например:

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

Вы должны сделать это вместо этого:

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

Если у вас есть частичная форма страницы для редактирования и добавления, то трюк, который я использую для установки значения по умолчанию для 0 это сделать следующее:

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

Так будет 0 если не задано или фактический возраст, если он существует.

Для .net core 5 значение настройки в htmlAttributes, похоже, не работает. Но вы можете использовать обходной путь:

      var ageTextBox = (TagBuilder) Html.TextBoxFor(x => x.Age);
ageTextBox.Attributes.Remove("value");
ageTextBox.Attributes.Add("value", "value you want to set");

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

<%: Html.TextBoxFor(x => x.Age,"0") %>
Другие вопросы по тегам