none
这个验证功能如何改善?? RRS feed

  • 问题

  •     在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;
            }
        }


    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!



    2013年5月15日 4:14

答案

全部回复

  • 直接用SqlCommand+标准的SQL语句进行验证:select count(*) from xxx ……, 用ExecuteScalar读取结果,如果大于0表示重复。否则允许。

    不过我的建议在于:索性把这个字段设置为只读字段(自增长或者是Guid类型的,默认值newid()即可)。


    If you think one reply solves your problem, please mark it as An Answer, if you think someone's reply helps you, please mark it as a Proposed Answer

    Help by clicking:
    Click here to donate your rice to the poor
    Click to Donate
    Click to feed Dogs & Cats


    Found any spamming-senders? Please report at: Spam Report

    2013年5月19日 7:43
  • 谢谢您的提示,问题已解决,下面是我的代码:

    protected void CustomValidator_ContractNumber_ServerValidate(object source, ServerValidateEventArgs args)
        {
            string strconn = "Data Source=.;Initial Catalog=长铁物业公司资产数据库;Integrated Security=True";
            SqlConnection cn = new SqlConnection(strconn);
            cn.Open();
            string strCondition= ((TextBox )this.FormView1.FindControl ("ContractNumberTextBox")).Text ;
            string strSearch = "select count(ContractNumber) from ContractTable";
            string  strEnd=" where ContractNumber = '"+strCondition +"'";
            strSearch = strSearch+strEnd;
            SqlCommand comm =new SqlCommand(strSearch ,cn);
            string strResult = comm.ExecuteScalar().ToString();
            if (strResult == "1")
            { args.IsValid = true; }
            else
            {
                args.IsValid = false;
                Response.Write("<script language=javascript>alert('合同号已存在!');</script>");
            }
            //Response.Write(strSearch);
            cn.Close();
        


    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!

    2013年5月21日 2:15