Pergunta

Então, eu tenho uma queda ASP lista para baixo (este é .net 2.0). Estou ligação com dados. Basicamente, quando a página é carregada e não é um posto de volta vamos buscar dados de registro, ligam todos os menus suspensos, e configurá-los para os seus valores apropriados (Estritamente falando, nós: página initialize com conjunto básico de dados de DB, ligam queda baixos de DB, buscar dados registro real da DB, conjunto baixos afogue se apropriar configurações neste momento). O que eu quero fazer é estilo seletivamente as opções da lista. Assim, os retornos de banco de dados 3 itens: ID, Texto e uma bandeira indicando se eu o registro é "ativo" (e eu vou pentear apropriadamente). É bastante fácil de fazer e eu fiz isso.

O meu problema é o que acontece quando um envio do formulário é interrompida. Nós estendemos um pouco da classe Page e criou um método AddError (), que irá criar uma lista de erros de verificações de regras de negócios falharam e, em seguida, exibi-los em um ValidationSummary. Ele funciona mais ou menos assim, no evento de clique do botão enviar:

CheckBizRules();

if(Page.IsValid)
{
    SaveData();
}

Se qualquer verificação de regra de negócio falhar, a página não será válido. O problema é que, quando a página re-torna (viewsate está habilitado, mas não há dados rebote) meu estilo bonito condicional é agora, infelizmente desaparecido, fora de viver na terra dos meias desaparecidas. Eu preciso preservá-lo.

Eu estava esperando para evitar outra chamada DB aqui (por exemplo, obter os dados de volta lista a partir do DB novamente se a página não é válido, apenas para fins de re-styling da lista). Mas não é o fim do mundo, se esse é o meu curso de ação. Eu estava esperando que alguém pode ter uma sugestão alternativa.

Eu não conseguia pensar em como expressar essa questão melhor, se alguém tiver alguma sugestão ou precisa de esclarecimentos, não hesite em fazê-lo, pela força se necessário. ;)

Foi útil?

Solução

Eu não tenho certeza I completelly entender que tipo de estilo que você aplicar para seus itens drop-down, mas parece que este estilo é algo que o controle não preserva accross postbacks. Normalmente, portanto, precisa deste tipo de informação a ser salvo no ViewState. Eu vejo duas opções (exceto re-carregamento da DB):

Primeiro método: Crie seu próprio controle drop-down que herda de DropDownList. Em seguida, salve denominar dados no saco ViewState do controle ao denominar os itens:

public void SetItemActive(ListItem item)
       {
         ViewState[item.Value] = "active";           
        }

, em seguida, substituir o OnRender

protected override void Render(HtmlTextWriter writer)
{

   ....

   foreach(ListItem item in Items)
   {
    if ( ViewState[item.Value] == "active")
    { 
            ** RenderActiveItem **
    }
    else 
    {
            ** RenderNormalItem **

    }

}

Segundo método: é para salvar o ativo ID da no ViewState da página, em seguida, re-estilo na lista suspensa em cada nova postagem usando os dados do ViewState em vez do DB

Outras dicas

Bem, eu não conseguia pensar em nada a não ser para ir para o banco de dados para re-recuperar minha lista de dados quando a página foi não válido, e re-estilo de controle.

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