日期:2014-05-17  浏览次数:20447 次

这个验证功能如何改善??
 在FormView的编辑模板中,有个控件ContractNumberTextBox(合同号),该控件绑定了SQL数据库中的ContractNumber,而ContractNumber是不能重复的。因此,我需要给ContractNumberTextBox加上一个验证控件CustomValidator_ContractNumber来验证ContractNumber是否重复。

    每次点击编辑,就会通过Text='<%# Bind("ContractNumber") %>',先让ContractNumberTextBox呈现它的值。


    当ContractNumberTextBox中的“合同号”写个新的值并且SQL中不存在,验证一切正常。

    但现在遇到一个特殊的情况,如果开始呈现出来的“合同号”我不做改变,即时这个合同号在SQL中也是唯一的,验证控件也会提示“该合同号已存在”。


    要怎么解决这个问题呢?其实就是要添加一个判断:如果ContractNumberTextBox的值重新输入了,就要验证;没改变就不用验证!

----------------------------前台--------------------------
<asp:CustomValidator ID="CustomValidator_ContractNumber" runat="server" 
                                            ErrorMessage="合同号已存在" Font-Size="10px" 
                                            onservervalidate="CustomValidator_ContractNumber_ServerValidate"></asp:CustomValidator>


------------------------后台---------------------------

protected void CustomValidator_ContractNumber_ServerValidate(object source, ServerValidateEventArgs args)
    {
        DataClassesDataContext db = new DataClassesDataContext();
        ContractTable mypt;
        args.IsValid = false;
        try//多个参数同时判定的写法!!!
        {
            mypt = db.ContractTable.Where(c => c.ContractNumber == ((TextBox)this.FormView1.FindControl("ContractNumberTextBox")).Text).First();
            

        }
        catch
        {
            args.IsValid = true;
        }
    }


------解决方案--------------------
    做个事务,事务可以回滚!