Asp.Net MVC- Html.TextBoxFor - установить для свойства автофокуса значение false
У меня есть два поля ввода в моем представлении бритвы. Один для имени пользователя и один для пароля.
Если имя пользователя имеет значение, переданное через ViewBag, тогда я не хочу устанавливать фокус на поле имени пользователя, а хочу сфокусироваться на поле пароля. Но в настоящий момент происходит то, что первый ввод имени пользователя всегда получает фокус. "Ложное" значение, похоже, ничего не делает. У меня был гугл и я проверил некоторые другие сообщения о переполнении стека, но я все еще не могу найти ответ на этот вопрос.
У меня есть простой код, как на мой взгляд:
@Html.TextBoxFor(m => m.Username, new { @placeholder = "Username", autofocus = (ViewBag.Username == "" ? "autofocus" : "false"), value = ViewBag.Username })
@Html.PasswordFor(m => m.Password, new { @placeholder = "Password", autofocus = (ViewBag.Username == "" ? "false" : "autofocus") })
Я знаю, что мог бы просто использовать JQuery для условной установки фокуса, но я надеялся, что будет способ пройти через Text Box Html Helper?
1 ответ
Автофокус - это логический атрибут. Согласно спецификации, если она существует, она должна быть указана как autofocus="autofocus"
или просто autofocus
, Чтобы "выключить" это случай, когда он не добавлен в качестве атрибута на вход.
Следуя совету в отличном ответе здесь, есть несколько способов сделать то, что вы хотите. Одним из способов является создание метода расширения, и вы можете сделать это следующим образом:
Создайте метод расширения следующим образом:
public static class AttributesExtensions
{
public static RouteValueDictionary AutofocusIf(
this object htmlAttributes,
bool autofocus
)
{
var attributes = new RouteValueDictionary(htmlAttributes);
if (autofocus)
{
attributes["autofocus"] = "autofocus";
}
return attributes;
}
}
Теперь, когда вы создаете текстовое поле вашего имени пользователя:
@Html.TextBoxFor(m => m.Username, new { @placeholder = "Username", value = (string) ViewBag.Username }.AutofocusIf(String.IsNullOrWhiteSpace((string) ViewBag.Username)))