即使用户控件验证为false,页面也会刷新

时间:2013-05-20 06:44:34

标签: c# asp.net user-controls custom-validators

我有usercontrol,其中我编写了自定义验证,用于检查文本框中输入的数据是否正确位置。单击按钮单击我已选中(page.IsValid)位,

偶数 - 如果验证失败,则重新加载添加了usercontrol的整个页面

自定义验证看起来像;

   <asp:CustomValidator id="CustomValidator1"  runat="server" Width="102px" Style="margin-left:37px !important" OnServerValidate="TextValidate" ControlToValidate="txtLocationId" ErrorMessage="Incorrect Location.">
  </asp:CustomValidator>

在UserControl.aspx.cs中: - &gt;

protected void TextValidate(object source, ServerValidateEventArgs args)
        {
            string value = string.Empty;
            dbconfig.conDatabase2.Open();
            SqlCommand cmdsqlcmd = new SqlCommand();
            cmdsqlcmd.CommandType = CommandType.Text;
            string locID = args.Value.ToString();
            cmdsqlcmd.CommandText = "";
            cmdsqlcmd.Connection = dbconfig.conDatabase2;

            Object ob = cmdsqlcmd.ExecuteScalar();
            if (ob == null)
            {
                args.IsValid = false;
            }
            else
            {
                args.IsValid = true;
            }
        }

开启按钮点击:

protected void goButton_OnClick(object sender,EventArgs e)         {             if(Page.IsValid)             { 代码在这里......              }         }

在aspx页面中:

<%@ Register Src="UserControl/UserControlFilter.ascx" TagName="UserControlFilter"
    TagPrefix="uc1" %>
<html>
<body>
    <form id="form1" runat="server">
    <AjaxToolkit:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
    </AjaxToolkit:ToolkitScriptManager>
    <asp:Timer ID="Timer1" runat="server" OnTick="Timer1_Tick" Interval="300000">
    </asp:Timer>

   <asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server">
                        <Triggers>
                            <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />
                        </Triggers>
                        <ContentTemplate>
                          <div class="locadetail" id="bigtrends" style="border-radius:5px;width: 884px; z-index: 100; border-width: 1px;
                                margin: 10px; height: 398px !important; float: left; background-color: #fff !important;">
                            </div>
                        </ContentTemplate>
                    </asp:UpdatePanel>
</form>
</body>
</html>

如果我在某个地方出错,请告诉我

感谢

3 个答案:

答案 0 :(得分:1)

自定义验证有两种模式1.客户端和2.服务器端。如果您仅使用服务器端验证,则页面将回送而不进行任何检查。在页面验证事件之前,页面加载被触发,因此添加客户端验证功能。这将验证您的测试。如果需要检查的数据仅在服务器上可用,则使用Web服务进行验证。

<SCRIPT LANGUAGE="JavaScript"> function TextValidate(oSrc, args){ // validation logic

}

<asp:CustomValidator id="CustomValidator1" runat="server" Width="102px" Style="margin-left:37px !important" OnServerValidate="TextValidate" ControlToValidate="txtLocationId" ErrorMessage="Incorrect Location." ClientValidationFunction="TextValidate" > </asp:CustomValidator>

答案 1 :(得分:0)

您的通话(在我看来)会调用服务器进行验证。因此,为了避免重新加载页面,您可以先执行JavaScript验证 ,然后再执行服务器端验证

$("#button").click(function(e) {
     var valueToValidate = $("#button").val(); 

     .... VALIDATION 

     e.preventDefault();
});

这样的东西应该做一些事情。但更好的是你提供更多的代码,以获得更合适的答案。

答案 2 :(得分:0)

在服务器端验证(文本验证)中,如果验证失败,则需要将arguments.IsValid设置为false