Pergunta

Eu tenho uma página da web c# asp.net com um formulário de upload de arquivo xml. Quando o usuário clica em 'Upload', um JavaScript Confirm Alert será exibido perguntando ao usuário: "Este arquivo está correto?". O alerta de confirmação será ativado apenas se o nome do arquivo não contiver um valor de um dos outros campos de formulário.

Qual é a melhor maneira de combinar o uso de um formulário C# ASP.NET e um JavaScript Confirme o alerta que é ativado se o nome de um arquivo que está sendo carregado não atende a determinados critérios?

Foi útil?

Solução

Suponho que você está colocando o valor da string válida em um campo oculto (você não mencionou). Implemento OnClientClick para o botão de upload:

<asp:button .... OnClientClick="return confirmFileName();"/>

<script type="text/javascript">
function confirmFileName()
{
    var f = $("#<%= file1.ClientID %>").val();
    var s=$("#<%= hidden1.ClientID %>").attr("value");
    if (f.indexOf(s) == -1) {
        if (!confirm("Is this correct file?")) {
            $("#<%=file1.ClientID %>").focus();
            return false;
        }
     }
    return true;
}
</script>

Editar:- sobre <%= file1.ClientID %>.

Isso será substituído pelo ID do lado do cliente do controle de upload do arquivo como ctl00$ctl00$cphContentPanel$file1. Ele coloca o script em esteróides em relação ao uso de algo como $("input[id$='file1']"). Para mais informações, consulte Postagem de Dave Wards.

Outras dicas

Não há muita coisa que você precisa fazer com C# para esta página, parece que a maior parte disso será feita no lado do cliente.

Adicione o controle FileUpload e um botão ao seu formulário .aspx. Defina a propriedade OnClientClick do botão para algo como

OnClientClick = "return myFunction()"

e então escreva uma função de JavaScript como:

function myFunction()
{
   // Check other text values here

   if (needToConfirm){
      return confirm('Are you sure you want to upload?');
   }
   else return true;
}

Verifique se "myfunction ()" retorna false se você deseja cancelar o postback (ou seja, o usuário clicou "não" na caixa de diálogo Confirmar). Isso cancelará o postback se eles clicarem em "Não".

window.onload = function() {
  document.forms[0].onsubmit = function() {
    var el = document.getElementById("FileUpload1");
    var fileName = el.value;

    if(fileName.indexOf("WHATEVER_VALUE") == -1) {
      if(!confirm("Is the file correct?")) {
        el.focus();
        return false;
      }
    }

    return true;
  }
}

Eu tive problemas para implementar esse tipo de coisa para trabalhar no IE e no Firefox por causa da maneira como os eventos funcionam nesses navegadores. Quando o fiz funcionar em um deles, o outro ainda causava um postback, mesmo que eu cancelasse.

Aqui está o que temos em nosso código (o teste do navegador foi roubado de outros lugares).

if (!window.confirm("Are you sure?"))
{
    if (/MSIE (\d+\.\d+);/.test(navigator.userAgent))
        window.event.returnValue = false;
    else
        e.preventDefault();
}

Além de usar a validação do lado do cliente, você também deve adicionar um CustomValidator para fornecer validação no lado do servidor. Você não pode confiar que o usuário tenha ativado o JavaScript ou que o usuário não ignorou suas verificações JavaScript.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top