gpt4 book ai didi

asp.net-mvc-3 - MVC 3 字段验证专注于失败

转载 作者:行者123 更新时间:2023-12-04 05:45:46 25 4
gpt4 key购买 nike

我们正在为基本网站制定一些可访问性标准,如果模型中定义的验证失败,则需要将焦点返回到用户名字段。我已经阅读了几篇文章,表明这是存在的行为。但是,这不是我们看到的行为。我对 mvc natice 功能持开放态度(我们正在使用带有 Razor 的 mvc 3)或 jquery)

最佳答案

I have read several posts that indicate this is the behavior as it exists



奇怪,你这些帖子在哪里?我建议您通知此类帖子的作者,这不是默认行为。

当然,当某些事情不是默认行为时,如果您想实现它,则必须实现它。例如,如果有多个错误,您还没有明确指定它应该如何表现:应该关注哪个字段?首先?第三?第七个?

假设您想关注第一个。假设您正在使用 jQuery,您可以将以下内容添加到您的 View 中:
@if (!ViewData.ModelState.IsValid)
{
var key = ViewData
.ModelState
.Where(x => x.Value.Errors.Count > 0)
.Select(x => x.Key)
.FirstOrDefault();

if (!string.IsNullOrEmpty(key))
{
<script type="text/javascript">
$(function () {
$(':input[name=@Html.Raw(Json.Encode(key))]').focus();
});
</script>
}
}

你已经完成了。好吧,几乎,此代码的进一步改进当然是将其外部化为可重用的 HTML 帮助程序,以避免将您的 View 转换为绝对可怕的东西。例如,您可以有一个自定义助手来实现此行为,您所要做的就是将以下内容添加到您的 _Layout 中。 :
@Html.FocusOnFirstError()

可以通过以下方式实现:
public static class HtmlExtensions
{
public static IHtmlString FocusOnFirstError(this HtmlHelper htmlHelper)
{
if (htmlHelper.ViewData.ModelState.IsValid)
{
return MvcHtmlString.Empty;
}

var key = htmlHelper
.ViewData
.ModelState
.Where(x => x.Value.Errors.Count > 0)
.Select(x => x.Key)
.FirstOrDefault();

if (string.IsNullOrEmpty(key))
{
return MvcHtmlString.Empty;
}

var script = new TagBuilder("script");
script.Attributes["type"] = "text/javascript";
script.InnerHtml = string.Format(
"$(function() {{ $(':input[name={0}]').focus(); }});",
Json.Encode(key)
);
return new HtmlString(script.ToString(TagRenderMode.Normal));
}
}

关于asp.net-mvc-3 - MVC 3 字段验证专注于失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10709267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com