我的剃刀视图上有两个输入字段。一个用于用户名,一个用于密码。
如果用户名具有通过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有一种方法吗?
答案 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)))