Pergunta

Eu tenho um dropdownlist com o autopostback definida como true.Eu quero que o utilizador para confirmar se eles realmente deseja alterar o valor, que no post de volta dispara um do lado do servidor de eventos (selectedindexchanged).

Eu tentei adicionar um atributo onchange "return confirm('por Favor, clique em OK para alterar.Caso contrário clique em 'CANCELAR'?';") mas não vai postback, independentemente de a confirmar resultado e o valor na lista de não voltar se cancelar selecionado.

Quando eu remover o atributo onchange do DropdownList marca, a página de postback.Não quando o atributo onchange é adicionado.Eu ainda precisará conectar o processador de eventos (estou no C# .Net 2.0 ).

Qualquer um leva irá ser útil.

Obrigado!

Foi útil?

Solução

Você já tentou definir o evento onChange para um função javascript e, em seguida, dentro da função de exibir o alerta de javascript e utilizam o __doPostback função se passa?

i.e.

   
drpControl.Attributes("onChange") = "DisplayConfirmation();"

function DisplayConfirmation() {
  if (confirm('Are you sure you want to do this?')) {
    __doPostback('drpControl','');
  }
}

Outras dicas

Você pode utilizar o controle CustomValidator para "validar" pendente chamando uma função javascript em que você fizer a confirmar():

        <asp:DropDownList ID="TestDropDown" runat="server" AutoPostBack="true" CausesValidation="true"
            ValidationGroup="Group1"
            OnSelectedIndexChanged="TestDropDown_SelectedIndexChanged">
            <asp:ListItem Value="1" Text="One" />
            <asp:ListItem Value="2" Text="Two" />
        </asp:DropDownList>
       <script type="text/javascript">
            function ConfirmDropDownValueChange(source, arguments) {
                arguments.IsValid = confirm("Are you sure?");
            }
        </script>
        <asp:CustomValidator ID="ConfirmDropDownValidator" runat="server"
            ClientValidationFunction="ConfirmDropDownValueChange" Display="Dynamic" ValidationGroup="Group1"  />

Os trabalhos seguintes, quando a DropDownList é acionar parcial postbacks:

// caching selected value at the time the control is clicked
MyDropDownList.Attributes.Add(
    "onclick",
    "this.currentvalue = this.value;");

// if the user chooses not to continue then restoring cached value and aborting by returning false
MyDropDownList.Attributes.Add(
    "onchange",
    "if (!confirm('Do you want to continue?')) {this.value = this.currentvalue; return false};");

Atualmente, você está sempre retornando o resultado da confirm(), e , assim, mesmo no caso de devolução true, você ainda vai parar a execução do evento antes que o postback pode disparar.O seu onchange deve return false; somente quando o confirm() faz, também, como este:

if (!confirm('Please click OK to change. Otherwise click CANCEL?')) return false;

Substituindo o atributo onchange não vai funcionar se você tiver o AutoPostBack definido como true, porque ASP.NET sempre vai acrescentar o seguinte ao final de sua onchange script:

;setTimeout('__doPostBack(\'YourDropDown\',\'\')', 0)

Se você definir o AutoPostBack como false e, em seguida, substituindo onchange com um "confirmar e __doPostBack" tipo de script (ver acima, err..abaixo) vai funcionar, mas você pode ter que criar manualmente o __doPostBack função.

if (!confirm('Please click OK to change. Otherwise click CANCEL?')) return false;

Sempre retorna para dropdownlist do OnSelectedIndexChanged evento é acionado se o usuário clicar em OK ou CANCELAR.

Certifique-se de que o seu evento está ligado:

dropDown.SelectedIndexChanged += new EventHandler(dropDown_SelectedIndexChanged);

Você também pode aplicar um do lado do cliente atributo para retornar a confirmação.Definir o índice de acordo, se cancelada.

dropDown.Attributes.Add("onchange", "javascript: return confirm('confirmation msg')");
&lt;asp:DropDownList runat="server" ID="ddlShailendra"  AutoPostBack="True" OnSelectedIndexChanged="ddlShailendra_SelectedIndexChanged" onchange="javascript: { if(confirm('Click ok to prevent post back, Cancel to make a postback'))return true;} " &gt;
          &lt;asp:ListItem Text="tes" Value="1" >&lt;/asp:ListItem&gt;
            &lt;asp:ListItem Text="test" Value="-1"&gt;&lt;/asp:ListItem&gt;
            &lt;/asp:DropDownList&gt;

Escreva a função inline e não tenho um "retorno" para a condição em que você quer um post de volta.Isso funciona e é de acordo com as normas.

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