Como preservar os valores variáveis ​​estáticos nas funções JavaScript no postback?

StackOverflow https://stackoverflow.com/questions/2146917

Pergunta

Eu tenho esta amostra abaixo:

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="Server">

    <script type="text/javascript">
function test(){

if (test.initialized=='undefined'){
    test.initialized = 'true';
    }

alert(test.initialized);

};
    </script>

</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
    <asp:Button ID="btnPostBack" runat="server" Text="Post back" OnClientClick="test()" />
</asp:Content>

Quando clico em pós-zagueiro na página, descobri que a variável inicializada-que é definida na própria função-está perdendo seu valor e se tornando 'indefinido' novamente.

É possível manter esses valores estáticos depois de definidos e torná -los inalterados de qualquer postagem na página?

Foi útil?

Solução

Eu não sei se este é o seu problema ou não, mas há um bug em 2013 para usar primeiro / sobrenome com ,.

é um problema contínuo. Poderia ser por isso que você está recebendo o nome de usuário para resolver, mas não os nomes de si mesmos!

Como usuário observado para Microsoft:

.

Nossa Convenção do Active Directory para o atributo Nome de exibição é "Sobrenome primeiro nome". Observe a vírgula entre o último e primeiro nomes.

Nossos nomes de logon são baseados nas iniciais das pessoas; Estes são 2, 3, 4 ou 5 personagens de comprimento.

No SharePoint 2013, experimentamos problemas nas listas, com pessoas selecionador e com refinadores de pesquisa. Parece que a vírgula no O nome de exibição é tratado como um separador de lista.

Ao editar uma lista com um campo de pessoa em formato de grade, somos experimentando esses problemas:

• Você não pode inserir uma pessoa através do "sobrenome, primeiro nome". Lança um erro: "O usuário não existe ou não é exclusivo" alguns dos nossos colegas não têm "sobrenome", portanto, sem vírgula em sua exibição e aqueles são validados sem problemas.

• Você não pode copiar uma pessoa validada com um preenchimento para outras linhas

• Você não pode procurar uma pessoa com o selecionador das pessoas e selecionar do Procurar Resultados. A seleção não passa a validação na grade, mas joga o erro que o usuário não existe, embora fosse sugerido pelo coletor de pessoas. (Nós assumimos que a pessoa é passada de pessoas selecionador ao componente de grade identificados através do nome de exibição string ou o atributo de nome distinto no qual a vírgula é interpretado incorretamente.)

• Se você digitar "sobrenome, primeiro nome" de uma pessoa e o primeiro nome Corresponde às iniciais de logon (atributo DN no anúncio) de outro pessoa, então a outra pessoa é selecionada.

• Nos refinadores de pesquisa, os nomes de pessoas são mostrados com 2 vírgulas em vez de 1. "Sobrenome", primeiro nome "

http://social.technet.microsoft.com/forums/en-us/a55569E7-DCF4-41A4-93FB-62ADFC6798FE/People-Picker-and-Accounts-With-commas?Forum= SharePointADMIN

Existem duas resoluções.

1 Use um script fornecido pela Microsoft para alterar:

De:

primeiro nome, sobrenome

para

primeiro nome sobrenome

http://gallery.technet.microsoft.com / Scriptcenter / 71818859-13CA-42F8-99F9-2783F70984C7 /

ou

2 Use esta atualização:

.

Problemas que este pacote cumulativo de atualização corrige

• Quando você atribui uma tarefa a um usuário cujo nome de exibição contém uma vírgula Em um site do SharePoint Server 2013, você recebe o seguinte erro Mensagem:

O usuário não existe ou não é exclusivo.

http://support.microsoft.com/kb/2825647

Também gostaria de notar que a Microsoft não vai corrigir o problema como seria construir outras áreas, mas parece que o hotfix resolve o problema!

Outras dicas

Talvez você queira fazer algo assim. Eu também acho que você está confundindo a função de teste com o objeto de teste.

var initialized = false;
function test(){
    if ( !initialized){
        initialized = true;
    }
};
            alert(initialized); // false
            test();
            alert(initialized); //true

O JavaScript será reexecionado no postback à medida que a página recarrega (a menos que você esteja usando painéis de atualização).

Para preservar um valor do lado do cliente, escreva o valor em um campo oculto do ASP usando JS e não renderize o JavaScript se o ISPostback for verdadeiro para que não seja substituído no postback

Eu acho que usar o posto parcial também é uma maneira.

Se não for possível, apenas usando o script Java, acho que os cookies podem ser de outra maneira, desde que não estejam retirados pelo usuário.

Meu sentimento é a melhor maneira é projetar a página de uma maneira que eu não precisaria armazená -la :)

Você pode adicionar um campo oculto e definir o valor disso? Eu acho que assim será preservado no ViewState, e você pode carregar seu valor de volta na sua variável com algo como:

var p = '<%= blah.text%>';

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