Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 MVC 3现场验证关注故障_Asp.net Mvc 3_Razor_Validation - Fatal编程技术网

Asp.net mvc 3 MVC 3现场验证关注故障

Asp.net mvc 3 MVC 3现场验证关注故障,asp.net-mvc-3,razor,validation,Asp.net Mvc 3,Razor,Validation,我们正在为一个基本网站制定一些可访问性标准,如果用户名字段未通过模型中定义的验证,则需要将焦点返回到用户名字段。我读过几篇文章,指出这是存在的行为。但是,这不是我们看到的行为。我对mvc natice功能持开放态度(我们将mvc 3与razor一起使用)或jquery) 我读过几篇文章,指出这是存在的行为 奇怪,你在哪里发的那些帖子?我建议您通知此类帖子的作者,这不是默认行为 当然,当某些东西不是默认行为时,如果你想实现它,你就必须实现它。例如,您没有确切地指定在出现多个错误时它应该如何工作:应

我们正在为一个基本网站制定一些可访问性标准,如果用户名字段未通过模型中定义的验证,则需要将焦点返回到用户名字段。我读过几篇文章,指出这是存在的行为。但是,这不是我们看到的行为。我对mvc natice功能持开放态度(我们将mvc 3与razor一起使用)或jquery)

我读过几篇文章,指出这是存在的行为

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

当然,当某些东西不是默认行为时,如果你想实现它,你就必须实现它。例如,您没有确切地指定在出现多个错误时它应该如何工作:应该关注哪个字段?第一个?第三个?七号

让我们假设您希望首先集中精力。假设您使用的是jQuery,则可以将以下内容添加到视图中:

@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>
    }
}
可以通过以下方式实施:

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

谢谢你,达林!尽管有[不必要的]讽刺,你还是给了我我所需要的。出色的职位。
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));
    }
}