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

时间:2015-08-21 09:00:32

标签: c# asp.net-mvc html-helper

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

如果用户名具有通过ViewBag传入的值,那么我不想将焦点设置为用户名字段,而是将焦点放在密码字段中。但目前发生的情况是第一个用户名输入始终获得焦点。 " false"价值似乎没有做任何事情。我有一个谷歌和检查了一些其他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有条件地设置焦点,但我希望通过Text Box Html Helper有一种方法吗?

1 个答案:

答案 0 :(得分:2)

自动对焦是一个布尔属性。根据{{​​3}},如果存在,则应将其列为autofocus="autofocus"autofocus。关闭"将其关闭"这是一种不在输入中添加它作为属性的情况。

根据优秀答案spec中的建议,有几种方法可以做你想要的。一种方法是创建一个扩展方法,你可以这样做:

创建一个类似的扩展方法:

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