小智 8
Page.MaintainScrollPositionOnPostBack = False
Page.SetFocus(txtManagerName)
Run Code Online (Sandbox Code Playgroud)
所以我认为问题是因为我试图专注于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(@"
<script type='text/javascript'>
$(document).ready(function() {{
var element = document.getElementById('{0}');
element.scrollIntoView();
element.focus();
}});
</script>
", control.ClientID));
}
Run Code Online (Sandbox Code Playgroud)
用法:
if (!this.PropertyForm.Validate())
{
this.PropertyForm.ErrorMessage.ScrollTo();
failed = true;
}
Run Code Online (Sandbox Code Playgroud)
(虽然看起来Page.RegisterClientScriptBlock()已弃用于Page.ClientScript.RegisterClientScriptBlock()).
您是否在页面上使用验证摘要?
如果是这样,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);
}
Run Code Online (Sandbox Code Playgroud)
请注意对ValidatorSetFocus的调用,这是一个相当长的方法,尝试将焦点设置为有问题的控件,或者如果您有多个错误,则使用(最终)以下行来确认最后一个已验证的控件:
if (typeof(ctrl.focus) != "undefined" && ctrl.focus != null) {
ctrl.focus();
Page_InvalidControlToBeFocused = ctrl;
}
Run Code Online (Sandbox Code Playgroud)
要使这种行为起作用,理想情况下需要确保所有验证器都设置为客户端 - 服务器端验证器显然需要回发,这可能会影响事物(即失去焦点/位置) - 并设置MaintainScrollPositionOnPostBack为true可能会导致页面重新加载到提交按钮,而不是无效的表单元素.
使用服务器端.Focus方法将导致ASP.NET在页面底部(即页面底部附近)呈现一些javascript,但这可能被上面讨论的其他机制之一覆盖.
归档时间: |
|
查看次数: |
27837 次 |
最近记录: |