自定义验证将数据检查到函数中

custom validation checking data into a function

我有这个功能可以让我将数据放入我的 gridview,但我想检查文本框是否包含文本或数值

protected void grdContact_RowCommand(object sender, GridViewCommandEventArgs e)
{            
    DboDocument contact = new DboDocument();

    if (e.CommandName.Equals("Insert"))
    {
        Label lblNewId_Riga = (Label)grdContact.FooterRow.FindControl("lblNewId_Riga");
        TextBox txtNewQuantita = (TextBox)grdContact.FooterRow.FindControl("txtNewQuantita");
        TextBox txtNewUnita_Misura = (TextBox)grdContact.FooterRow.FindControl("txtNewUnita_Misura");
        TextBox txtNewDescrizione = (TextBox)grdContact.FooterRow.FindControl("txtNewDescrizione");
        TextBox txtNewPrezzo_Unitario = (TextBox)grdContact.FooterRow.FindControl("txtNewPrezzo_Unitario");
        TextBox txtNewIva = (TextBox)grdContact.FooterRow.FindControl("txtNewIva");

        List<DettagliFattura> tmpDettagli = new List<DettagliFattura>();

        if (Session["lst_dettagli"] != null)
        {
            tmpDettagli = (List<DettagliFattura>)Session["lst_dettagli"];
        }

        DettagliFattura Dettaglio = new DettagliFattura();

        Dettaglio.quantita = Convert.ToInt32(txtNewQuantita.Text);
        Dettaglio.unita_misura = txtNewUnita_Misura.Text;
        Dettaglio.descrizione = txtNewDescrizione.Text;
        Dettaglio.valore_unitario = Convert.ToDecimal(txtNewPrezzo_Unitario.Text);
        Dettaglio.iva_percento = Convert.ToDecimal(txtNewIva.Text);

        tmpDettagli.Add(Dettaglio);

        Session["lst_dettagli"] = tmpDettagli;


        FillGrid();
        CalcolaTotale();
    }
}

这里我想检查文本框是否填充了数字数据或文本数据,但我无法从我的自定义验证函数访问这些文本框

protected void ValidatoreTipiDato_ServerValidate(object source, ServerValidateEventArgs args)
{
    //if txtNewDescrizione contains numeric data = Args.IsValid = false; etc
}

您可以使用 args 参数获取 TextBox 的值:

protected void ValidatoreTipiDato_ServerValidate(object source, ServerValidateEventArgs args)
{
    int x = int.MinValue;
    int.TryParse(args.Value, out x);

    if (x != int.MinValue)
    {
        // It is a number
    }
    else
    {
        // It is not a nuber
    }
}

或者如果您出于其他原因确实想访问 TextBox,您可以使用 source 参数,在本例中它是一个 CustomValidator 对象,以访问它的 ControlToValidate 属性:

protected void ValidatoreTipiDato_ServerValidate(object source, ServerValidateEventArgs args)
{
    CustomValidator vc = source as CustomValidator;
    TextBox txt = FindControl(vc.ControlToValidate) as TextBox;

    if (txt != null)
    {
        int x = int.MinValue;
        int.TryParse(txt.Text, out x);

        if (x != int.MinValue)
        {
            // It is a number
        }
        else
        {
            // It is not a nuber
        }
    }
}

您需要使用 args 参数来获取文本框值。 Taken from here

  protected void ValidatoreTipiDato_ServerValidate(object source, ServerValidateEventArgs args)
  {
     try 
     {
        // Test whether the value entered into the text box is even.
        int i = int.Parse(args.Value);
        args.IsValid = ((i%2) == 0);
     }

     catch(Exception ex)
     {
        args.IsValid = false;
     }
  }