当前位置:  开发笔记 > 编程语言 > 正文

ASP.NET:滚动到控件

如何解决《ASP.NET:滚动到控件》经验,为你挑选了3个好方法。

我在页面中有一个特别大的表单.验证表单并且字段无效时,我想将窗口滚动到该控件.调用控件的Focus()似乎不会这样做.我找到了一个JavaScript解决方法来将窗口滚动到控件,但是ASP.NET内置了什么?



1> 小智..:
Page.MaintainScrollPositionOnPostBack = False
Page.SetFocus(txtManagerName)



2> core..:

所以我认为问题是因为我试图专注于HtmlGenericControls而不是WebControls.

我刚刚结束了以下的解决方法:

http://ryanfarley.com/blog/archive/2004/12/21/1325.aspx http://www.codeproject.com/KB/aspnet/ViewControl.aspx

......为了时间的利益.

public static void ScrollTo(this HtmlGenericControl control)
{
    control.Page.RegisterClientScriptBlock("ScrollTo", string.Format(@"

        

    ", control.ClientID));
}

用法:

if (!this.PropertyForm.Validate())
{
    this.PropertyForm.ErrorMessage.ScrollTo();
    failed = true;
}

(虽然看起来Page.RegisterClientScriptBlock()已弃用于Page.ClientScript.RegisterClientScriptBlock()).



3> Zhaph - Ben ..:

您是否在页面上使用验证摘要?

如果是这样,ASP.NET 会渲染一些javascript以自动滚动到页面顶部,这可能会覆盖客户端验证的自动行为以聚焦最后一个无效控件.

此外,您是否关闭了客户端验证?

如果你看一下客户端验证生成的javascript,你应该看到这样的方法:

function ValidatorValidate(val, validationGroup, event) {
  val.isvalid = true;
  if ((typeof(val.enabled) == "undefined" || val.enabled != false) && 
      IsValidationGroupMatch(val, validationGroup)) {
    if (typeof(val.evaluationfunction) == "function") {
      val.isvalid = val.evaluationfunction(val);
      if (!val.isvalid && Page_InvalidControlToBeFocused == null &&
          typeof(val.focusOnError) == "string" && val.focusOnError == "t") {
        ValidatorSetFocus(val, event);
      }
    }
  }
  ValidatorUpdateDisplay(val);
}

请注意对ValidatorSetFocus的调用,这是一个相当长的方法,尝试将焦点设置为有问题的控件,或者如果您有多个错误,则使用(最终)以下行来确认最后一个已验证的控件:

if (typeof(ctrl.focus) != "undefined" && ctrl.focus != null) {
  ctrl.focus();
  Page_InvalidControlToBeFocused = ctrl;
}

要使这种行为起作用,理想情况下需要确保所有验证器都设置为客户端 - 服务器端验证器显然需要回发,这可能会影响事物(即失去焦点/位置) - 并设置MaintainScrollPositionOnPostBack为true可能会导致页面重新加载到提交按钮,而不是无效的表单元素.

使用服务器端.Focus方法将导致ASP.NET在页面底部(即页面底部附近)呈现一些javascript,但这可能被上面讨论的其他机制之一覆盖.

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有