Como preservar os valores variáveis estáticos nas funções JavaScript no postback?
-
23-09-2019 - |
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?
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 "
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%>';