技术开发 频道

无刷新方式校验数据库内容的验证控件


【IT168技术文档】

  DOTNET里的验证框架确实很方便,对于一些表单的填写的基本验证,比如必填验证,正则验证等都能很好的处理,外还保证了服务器端的验证,真所谓省事又省心。也有些情况下需要验证些比较复杂的逻辑,比如选了某个选项,就必须填写某个文本框的内容,这种情况下,DOTNET也提供了扩展,有个 Customvalidator可以解决。而对于某些内容需要到数据库里验证下的,显然光靠客户端是不能实现的,用Cusomvalidator的服务器端验证确实可以实现,但是需要来回刷新那么一遍,当然有些烦人。因此弄了个自定义的验证控件,简单摆弄了一下,整出了个DataBaseContentValidator。主要技术还是利用ICallbackEventHandler实现无刷新操作,只不过这次还继承了个BaseValidator。最终用起来跟一般的验证控件没什么差别,也是由于继承了BaseValidator的原因。
  用法:实现ValidateContent事件,然后设置事件参数的IsValid属性
1<asp:TextBox ID="dafd" runat="server"></asp:TextBox> 2 <cc1:DataBaseContentValidator runat="server" ID="dataBaseContentValidator1" Display="Dynamic" 3 ErrorMessage="不存在该供应商" OnValidateContent="dataBaseContentValidator1_ValidateContent" 4 SetFocusOnError="True" ControlToValidate="dafd" EnableClientScript="False"></cc1:DataBaseContentValidator> 5 <asp:Button ID="btn" runat="server" Text="check" OnClick="btn_Click1" />
1/**//// <summary> 2 /// ValidateContent事件 3 /// </summary> 4 /// <param name="sender"></param> 5 /// <param name="e"></param> 6 protected void dataBaseContentValidator1_ValidateContent(object sender, Shenba.CustomControl.DataBaseContentValidator.ValidateArgs e) 7 { 8 int recCount = 0; 9 using (SqlConnection con = new SqlConnection(conString)) 10 { 11 SqlCommand command = new SqlCommand("select count('a') from suppliers1 where CompanyName = @name", con); 12 command.Parameters.Add(new SqlParameter("@name", e.Value)); 13 con.Open(); 14 recCount = (int)command.ExecuteScalar(); 15 } 16 17 // 根据结果设置参数的IsValid属性 18 e.IsValid = recCount > Decimal.Zero; 19 } 20 21 protected void btn_Click1(object sender, EventArgs e) 22 { 23 if (Page.IsValid) 24 { 25 if (!Page.ClientScript.IsStartupScriptRegistered("Pass")) 26 { 27 Page.ClientScript.RegisterStartupScript(GetType(), "Pass", "alert('Pass');", true); 28 } 29 } 30 }
0
相关文章