Como salvar variáveis por sessão de usuário por página
-
10-12-2019 - |
Pergunta
Estou usando três webparts.A Webpart A cria um valor quando o usuário clica no botão na Webpart A.A WebPart B usa esse valor para criar uma lista com itens que o usuário pode selecionar.WebPart C usa ambos os valores para criar uma string para fins de teste.
WebPart B usa esta lista para preencher uma caixa suspensa.Sempre que o valor selecionado for alterado ele deverá atualizar a WebPart C.Esta é a declaração do controle.
_documentTypeList = new DropDownList();
_documentTypeList.AutoPostBack = true;
this.Controls.Add(_documentTypeList);
O problema aqui é que usar
_documentTypeList.AutoPostBack = true;
recarrega a página completa e redefine o valor na WebPart A como nulo.Como envio o novo valor da WebPart B para a WebPart C sem perder o valor da WebPart A?Tudo isso acontece em 1 página.
Solução
salvar variáveis de estado da sessão pode ser feito usando:
public string Name
{
get
{
return Page.Session["SaveName"] as string;
}
set
{
Page.Session["SaveName"] = value;
}
}
este é um getter/setter para salvar/obter do estado da sessão
para usar isso faça o seguinte:
isso obtém o valor do estado da sessão (precisa estar no evento onPreRender para ver as variáveis do estado da sessão)
txtName.Text = Name;
isso define o estado da sessão (pode estar em qualquer lugar onde você deseja salvar no estado da sessão)
Name = txtName.Text;
para valor interno:
troca public string Name
para public int Name
e o mesmo vale para qualquer outra coisa, como valores bool, etc.
então ficaria assim para int:
public int Name
{
get
{
return Page.Session["SaveName"] as int;
}
set
{
Page.Session["SaveName"] = value;
}
}
Como outros observaram, para que os dados sejam transmitidos entre webparts, você deve usar o método iInterface:
fornecer (webpart enviando dados) consumidor (webpart usando esses dados) e interface que é a conexão entre as webparts:
o procedimento acima funcionará 100% e salvará seus valores no postback :)
caso você precise disso;) iv postei alguns links nas conexões abaixo.
Problemas conectáveis de WebParts........................?
e
espero que ajude :)
Outras dicas
Você tentou if (!Page.IsPostBack) { your code here }
?
Você já tentou criar uma conexão de web part personalizada para sua finalidade?Analisar sua necessidade pode ser a opção mais apropriada
Anteriormente, as web parts eram conectadas na seguinte ordem.
WebPart A => WebPart B
WebPart B => WebPart C
WebPart A => WebPart C
isso criou um erro se eu quisesse chamar ambos os valores na WebPart C quando alterei o valor na WebPart B.Sempre que o valor da WebPart B era alterado era necessário recarregar a página e, portanto, recarregar a WebPart A.Como a WebPart A tinha um valor criado na interação do usuário e não no carregamento da página, o valor foi perdido.WebPart B e WebPart C apreendidos para funcionar sem o valor de WebPart A.Se você deseja manter a conexão WebPart conforme descrito acima, verifique a resposta do quaseSharePointMaster.
Como no meu caso a WebPart A cria um token de login exclusivo, prefiro não salvá-lo na página.Eu prefiro mantê-lo dentro dos WebParts.Para fazer isso mudei a conexão entre eles.Em vez da conexão acima, usei a seguinte conexão.
WebPart A => WebPart B => WebPart C
A WebPart B salva o valor da WebPart A e o fornece junto com seu próprio valor para a WebPart C.Esta é a aparência atual da interface WebParts B.
public interface IWebPartB
{
string webPartAValue { get; }
string webPartBValue { get; }
}