Jump to content

rafaelbh

Members
  • Content count

    26
  • Joined

  • Last visited

Community Reputation

2 Comum

About rafaelbh

  1. rafaelbh

    Como utilizar dois "Custom Validator" na mesma página? C#

    Resolvido. Coloquei um if para pegar o controle a ser validado: function DataValidator_ClientValidate(source, clientside_arguments) { clientside_arguments.IsValid = false; if (Page_Validators.controltovalidate == document.getElementById("tbxContato")) { jQuery.ajax({ type: "POST", async: false, url: "detContato.aspx/IsDataValid", data: "{Contato: '" + clientside_arguments.Value + "', ContatoCompleto: '" + $("[id*=tbxContatoCompleto]").val() + "'}", contentType: "application/json; charset=utf-8", dataType: "json", success: function (msg) { clientside_arguments.IsValid = msg.d; }, error: function (msg) { clientside_arguments.IsValid = false; } }); } if (Page_Validators.controltovalidate == document.getElementById("ddlHoraFimInsert")) { jQuery.ajax({ type: "POST", async: false, url: "detContato.aspx/IsDataValid_DATAHORA", data: "{HoraFim: '" + clientside_arguments.Value + "', HoraInicio: '" + $("[id*=ddlHoraInicioInsert]").val() + "', DataInicio: '" + $("[id*=tbxDataInicioInsert]").val() + "', DataFim: '" + $("[id*=tbxDataFimInsert]").val() + "'}", contentType: "application/json; charset=utf-8", dataType: "json", success: function (msg) { clientside_arguments.IsValid = msg.d; }, error: function (msg) { clientside_arguments.IsValid = false; } }); }; //if (Page_Validators.controltovalidate == document.getElementById("ddlHoraInicioInsert")) { //jQuery.ajax({ // type: "POST", // async: false, // url: "detContato.aspx/IsDataValid_DATAHORA", // data: "{HoraFim: '" + clientside_arguments.Value + "', HoraInicio: '" + $("[id*=ddlHoraInicioInsert]").val() + "', DataInicio: '" + $("[id*=tbxDataInicioInsert]").val() + "', DataFim: '" + $("[id*=tbxDataFimInsert]").val() + "'}", // contentType: "application/json; charset=utf-8", // dataType: "json", // success: function (msg) { // clientside_arguments.IsValid = msg.d; // }, // error: function (msg) { // clientside_arguments.IsValid = false; // } //}); return clientside_arguments.IsValid; } Porém, preferi criar duas funções com nomes diferentes. function DataValidator_ClientValidate(source, clientside_arguments) { clientside_arguments.IsValid = false; jQuery.ajax({ type: "POST", async: false, url: "detContato.aspx/IsDataValid", data: "{Contato: '" + clientside_arguments.Value + "', ContatoCompleto: '" + $("[id*=tbxContatoCompleto]").val() + "'}", contentType: "application/json; charset=utf-8", dataType: "json", success: function (msg) { clientside_arguments.IsValid = msg.d; }, error: function (msg) { clientside_arguments.IsValid = false; } }); return clientside_arguments.IsValid; } function DataValidator_ClientValidate_DATAHORA(source, clientside_arguments) { clientside_arguments.IsValid = false; jQuery.ajax({ type: "POST", async: false, url: "detContato.aspx/IsDataValid_DATAHORA", data: "{HoraFim: '" + clientside_arguments.Value + "', HoraInicio: '" + $("[id*=ddlHoraInicioInsert]").val() + "', DataInicio: '" + $("[id*=tbxDataInicioInsert]").val() + "', DataFim: '" + $("[id*=tbxDataFimInsert]").val() + "'}", contentType: "application/json; charset=utf-8", dataType: "json", success: function (msg) { clientside_arguments.IsValid = msg.d; }, error: function (msg) { clientside_arguments.IsValid = false; } }); return clientside_arguments.IsValid; } coloquei os dois custom validators: <asp:CustomValidator ID="DataValidator" runat="server" ClientValidationFunction="DataValidator_ClientValidate" ControlToValidate="tbxContato" Display="None" ErrorMessage="Esse Contato já existe!" meta:resourcekey="DataValidatorResource1" OnServerValidate="DataValidator_ServerValidate" SetFocusonerror="True" ValidationGroup="valgroup" /> <ajaxtoolkit:ValidatorCalloutExtender ID="DataValidatorE" runat="server" CloseImageUrl="~/Layout/Imagens/close_12x12.png" CssClass="customCalloutStyle" PopupPosition="BottomRight" TargetControlID="DataValidator" WarningIconImageUrl="~/Layout/Imagens/excl.png" /> <asp:CustomValidator ID="DataValidator_DATAHORA" runat="server" ClientValidationFunction="DataValidator_ClientValidate_DATAHORA" ControlToValidate="ddlHoraFimInsert" Display="None" ErrorMessage="Hora Fim deve ser maior que Hora Início!" meta:resourcekey="DataValidatorResource1_DATAHORA" OnServerValidate="DataValidator_ServerValidate_DATAHORA" SetFocusonerror="True" ValidationGroup="valgroup" /> <ajaxToolkit:ValidatorCalloutExtender ID="DataValidatorE_DATAHORA" runat="server" CloseImageUrl="~/Layout/Imagens/close_12x12.png" CssClass="customCalloutStyle" TargetControlID="DataValidator_DATAHORA" WarningIconImageUrl="~/Layout/Imagens/excl.png" PopupPosition="BottomLeft" /> e meu codebehind ficou assim: [System.Web.Services.WebMethod(Description = "Verifica se o dado já está cadastrado.")] public static bool IsDataValid(string Contato, string ContatoCompleto) { try { SqlConnection conex = DBUtils.CreateConnection(); SqlCommand cmd = new SqlCommand(); string cod = null; int result = 0; //Pega a QueryString no método do tipo static NameValueCollection collection = GetQueryStringCollection(HttpContext.Current.Request.UrlReferrer.Query); if (collection != null && collection.Count > 0) { cod = HttpContext.Current.Server.UrlDecode(collection["cod"]); } if (cod == "0") { result = Queries.selectValidaContato(Contato, ContatoCompleto); } else if (cod != "0") { result = Queries.selectValidaContato(Contato, ContatoCompleto, cod); } if (result == 0) return true; else return false; } catch (Exception ex) { throw ex; } } protected void DataValidator_ServerValidate(object sender, ServerValidateEventArgs e) { e.IsValid = IsDataValid(e.Value, ((TextBox)FormView1.FindControl("tbxContatoCompleto")).Text); } [System.Web.Services.WebMethod(Description = "Verifica se a data/hora início é menor que a data/hora fim.")] public static bool IsDataValid_DATAHORA(string HoraFim, string HoraInicio, string DataInicio, string DataFim) { try { SqlConnection conex = DBUtils.CreateConnection(); SqlCommand cmd = new SqlCommand(); string cod = null; //Pega a QueryString no método do tipo static NameValueCollection collection = GetQueryStringCollection(HttpContext.Current.Request.UrlReferrer.Query); if (collection != null && collection.Count > 0) { cod = HttpContext.Current.Server.UrlDecode(collection["cod"]); } if (Convert.ToDateTime(DataInicio) == Convert.ToDateTime(DataFim)) { if (Convert.ToInt16(HoraInicio) > Convert.ToInt16(HoraFim)) { return false; } else { return true; } } else { return true; } } catch (Exception ex) { throw ex; } } protected void DataValidator_ServerValidate_DATAHORA(object sender, ServerValidateEventArgs e) { e.IsValid = IsDataValid_DATAHORA(e.Value, ((DropDownList)FormView1.FindControl("ddlHoraInicioInsert")).SelectedValue, ((TextBox)FormView1.FindControl("tbxDataInicioInsert")).Text, ((TextBox)FormView1.FindControl("tbxDataFimInsert")).Text); } //Get Querystring name value collection public static NameValueCollection GetQueryStringCollection(string url) { string keyValue = string.Empty; NameValueCollection collection = new NameValueCollection(); string[] querystrings = url.Split('&'); if (querystrings != null && querystrings.Count() > 0) { for (int i = 0; i < querystrings.Count(); i++) { string[] pair = querystrings[i].Split('='); collection.Add(pair[0].Trim('?'), pair[1]); } } return collection; } Resumindo: Na verdade eu tava fazendo tudo certo, só tava esquecendo de colocar no cabeçalho do método a tag do WebMethod: [System.Web.Services.WebMethod(Description = "Verifica se a data/hora início é menor que a data/hora fim.")] Pode fechar o tópico. ;)
  2. Pessoal, tenho uma WebForm com um Formview e preciso validar alguns campos utilizando o Custom Validator. em um validador, vou fazer comparação se já existe determinado usuário cadastrado no banco de dados utilizando um textbox de nome completo e um textbox de apelido. não tenho campo de cpf. (esse validador já está funcionando). porém, preciso fazer uma validação de data e hora inicial ser menor ou igual à data e hora final e consigo usar o validador sem problemas em uma outra página. meu problema é que, agora, tenho uma única página em que tenho que fazer essas comparações. queria usar dois Custom Validator nessa tela, mas não sei como usar. tenho uma função javascript para o lado cliente: function DataValidator_ClientValidate(source, clientside_arguments) { clientside_arguments.IsValid = false; jQuery.ajax({ type: "POST", async: false, url: "detContato.aspx/IsDataValid", data: "{Contato: '" + clientside_arguments.Value + "', ContatoCompleto: '" + $("[id*=tbxContatoCompleto]").val() + "'}", contentType: "application/json; charset=utf-8", dataType: "json", success: function (msg) { clientside_arguments.IsValid = msg.d; }, error: function (msg) { clientside_arguments.IsValid = false; } }); return clientside_arguments.IsValid; além da função javascript, tenho o validator associado ao meu campo txbContato: <asp:CustomValidator ID="DataValidator" runat="server" ClientValidationFunction="DataValidator_ClientValidate" ControlToValidate="tbxContato" Display="None" ErrorMessage="Esse Contato já existe!" meta:resourcekey="DataValidatorResource1" OnServerValidate="DataValidator_ServerValidate" SetFocusOnError="True" ValidationGroup="valgroup" /> <ajaxtoolkit:ValidatorCalloutExtender ID="DataValidatorE" runat="server" CloseImageUrl="~/Layout/Imagens/close_12x12.png" CssClass="customCalloutStyle" PopupPosition="BottomRight" TargetControlID="DataValidator" WarningIconImageUrl="~/Layout/Imagens/excl.png" /> e, no arquivo .cs tenho os métodos: protected void btnGravar_Click(object sender, EventArgs e) { if (IsValid) { // bla bla bla } else { ((CustomValidator)FormView1.FindControl("DataValidator")).IsValid = false; } } public static bool IsDataValid(string Contato, string ContatoCompleto) { try { SqlConnection conex = DBUtils.CreateConnection(); SqlCommand cmd = new SqlCommand(); string cod = null; int result = 0; //Pega a QueryString no método do tipo static NameValueCollection collection = GetQueryStringCollection(HttpContext.Current.Request.UrlReferrer.Query); if (collection != null && collection.Count > 0) { cod = HttpContext.Current.Server.UrlDecode(collection["cod"]); } if (cod == "0") { result = Queries.selectValidaContato(Contato, ContatoCompleto); } else if (cod != "0") { result = Queries.selectValidaContato(Contato, ContatoCompleto, cod); } if (result == 0) return true; else return false; } catch (Exception ex) { throw ex; } } protected void DataValidator_ServerValidate(object sender, ServerValidateEventArgs e) { e.IsValid = IsDataValid(e.Value, ((TextBox)FormView1.FindControl("tbxContatoCompleto")).Text); } Não sei como utilizar os dois validadores na mesma página. Já tentei alterar o nome dos métodos/funções, mas não funcionou como deveria. Acredito que seja por causa do "IsValid", que não tenho nem ideia de como diferenciá-lo de acordo com o validador. Não sei se fui muito claro em minha dúvida, mas é: basicamente como utlizar dois custom validator na mesma página?
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.