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)))
Другие вопросы по тегам