【问题标题】:Set focus on on ASP.NET MVC model errors专注于 ASP.NET MVC 模型错误
【发布时间】:2010-10-18 01:23:08
【问题描述】:

我有一个模型可以进行一些验证检查并将错误添加到 ModelState:

ViewData.ModelState.AddModelError("mycontrol", "message")

它们在视图端显示良好,但有没有办法将焦点设置到与验证消息对应的控件?现在,页面会刷新并停留在页面顶部,因此如果错误出现在页面末尾,那么用户就看不出发生了什么。

注意:另一种解决方案是 ValidationSummary 在页面顶部显示错误列表,但我一直无法让它显示任何内容。我的所有错误都通过 ValidationMessage 显示。

编辑:我发现我的 ValidationSummary 有问题。我的标记是:

<% Html.ValidationSummary()%>

应该是:

<%=Html.ValidationSummary()%>

不过,我仍然想知道如何捕捉到出现错误的字段。

【问题讨论】:

  • ValidationSummary 应该可以工作。它对我有用。您能否向我们展示您的一些标记(也许通过省略静态 html 来简化)? HtmlHelper 扩展查看相同的模型状态以呈现错误。
  • 当我注意到标记中缺少“=”(并将张开的手掌放在额头上)时,我发布了示例代码。

标签: asp.net-mvc model-view-controller validation


【解决方案1】:

滚动到第一个输入时出现错误的一些 jquery 优点。棘手的一点是,您必须在调用 focus() 之前获取底层 DOM 元素,因为 jQuery 对象上的 focus() 方法会触发焦点事件,而不是将焦点赋予元素。

<script type='text/javascript'>
    $(document).ready( function()
    {
       var input = $('.input-validation-error:first');

       if(input)
       {
           input.focus();
       }
    });
</script>

【讨论】:

  • 很好的解决方案。我只需要添加“return false”即可使其正常工作。如果(输入){ 输入。焦点();返回假; }
  • @HallgeirEngen 真的没有必要。它所要做的就是中止就绪处理程序的执行。如果之后有任何代码,则不会执行。
【解决方案2】:

您可以使用 JavaScript 在页面上查找添加了 MVC 验证 HTML 类 (input-validation-error) 的输入元素,并将克拉移至第一个元素。虽然我还没有测试过,但 / 应该 / 将屏幕移动到那个元素。

像 jQuery 这样的 JS 库可以让这一切变得简单。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多