Asp.Net MVC- Html.TextBoxFor - 将自动对焦 属性 设置为 false

Asp.Net MVC- Html.TextBoxFor - Set Autofocus property to false

我的 razor 视图上有两个输入字段。一个用于用户名,一个用于密码。

如果用户名具有通过 ViewBag 传递的值,那么我不想将焦点设置到用户名字段,而是将焦点设置到密码字段。但目前发生的情况是第一个用户名输入总是获得焦点。 "false" 值似乎没有任何作用。我有一个 google 周围并检查了其他一些 Stack Overflow 帖子,但我似乎仍然无法找到答案。

在我看来,我有这样简单的代码:

@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 有条件地设置焦点,但我希望有一种方法可以通过文本框 Html Helper?

自动对焦是一个布尔属性。根据 spec,如果存在,则应列为 autofocus="autofocus" 或简单地列为 autofocus。对于"turn it off",这是一种不将其添加为输入属性的情况。

按照优秀答案 here 中的建议,有几种方法可以满足您的需求。一种方法是创建一个扩展方法,您可以这样做:

像这样创建一个扩展方法:

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)))