如何在回发之前在客户端上调用RequiredFieldValidator

时间:2010-03-22 00:26:43

标签: asp.net validation

我继承了一些使用div将页面分成多个标签的代码。在第一页上有许多必需的字段和正则表达式验证器。问题是用户可以切换到另一个选项卡,触发回发并使第一页上的验证器失败,使事情陷入混乱。

我希望能够做的是在用户选择另一个选项卡时在第一页上执行验证,从而防止他们在第一页有效之前移动到新选项卡。

<ul>                        
     <li><a href="#tab1">Tab 1</a> </li>
     <li><a href="#tab2" onclick="return isValid();">Tab 2</a></li> 
     <li><a href="#tab3" onclick="return isValid();">Tab 3</a></li> 
</ul>

isValid需要触发验证器。

谢谢!

更新:但codeka提供的答案非常接近,因为我需要同时提供href和onclick属性(以避免搞乱显示),标签(锚点)开关仍在即使验证失败也要放置。这就是我解决这个问题的方法。免责声明:未来的丑陋代码

<ul>                        
    <li><a id="tab1Tab" href="#tab1" style="display:none"/><a onclick="isValid('tab1');">Tab 1</a></li>
    <li><a id="tab2Tab" href="#tab2" style="display:none"/><a onclick="isValid('tab2');">Tab 2</a></li>
    <li><a id="tab3Tab" href="#tab3" style="display:none"/><a onclick="isValid('tab3');">Tab 3</a></li>
</ul>

function isValid(tab) {
    var valid = Page_ClientValidate();
    var tabId = (valid ? tab : "tab1") + "Tab";
    $("#" + tabId).click();
}

注意使用jQuery实现与click事件的跨浏览器兼容性。这只适用于其他标签上没有验证器的情况,根据Thomas的回答,我需要在isValid中使用验证组和额外的逻辑(如果有的话)。

2 个答案:

答案 0 :(得分:2)

ASP.NET创建一个全局javascript函数Page_ClientValidate,您可以调用它来激活验证器:

function isValid() {
    return Page_ClientValidate();
}

答案 1 :(得分:2)

您可以尝试为每个标签使用验证组。在从一个选项卡到另一个选项卡的单击时,您可以调用类似于选项卡名称代表验证组的内容:

function TabValidate( tabName ) {
    if ( Page_ClientValidate( tabName ) ) {
        //do stuff
    }
}

ADDITION 我在评论中提到了这一点,但我想我会把它添加到我的帖子中。如果其他选项卡上没有任何其他验证器,那么另一个解决方案是简单地标记其他选项卡上的其他.NET控件,这些控件可以使用CausesValidation =“false”触发回发(例如,DropDownLists with AutoPostBack =“true”)