#c# #asp.net #.net
#c# #asp.net #.net
Вопрос:
В Page_Load я вызываю метод, который просто перечисляет некоторые данные, поступающие из моей базы данных. Но, если я перемещаюсь по своему веб-сайту, а затем возвращаюсь к этой же ссылке, в которой просто перечислены некоторые данные, метод не проходит через Page_Load, а затем показывает старые значения данных.
Почему мой Page_Load вызывается только один раз?
Моя страница загружается
protected void Page_Load(object sender, EventArgs e)
{
this.CarregaList();
}
Мой каррегалистский метод
protected void CarregaList()
{
Utilidade.Conexao con = new Utilidade.Conexao();
dsChave.ConnectionString = con.Con;
#region :::: Montando o Select da lista ::::
//// Parametros do Usuário,podem ser pegos pelo token
Utilidade.QuebraToken tk = new Utilidade.QuebraToken();
int Acesso = Convert.ToInt32(tk.CarregaToken(15, Request.Cookies["token"].Value));
int IdUsuario = Convert.ToInt32(tk.CarregaToken(0, Request.Cookies["token"].Value));
int Celula = Convert.ToInt32(tk.CarregaToken(21, Request.Cookies["token"].Value));
int Credenciada = Convert.ToInt32(tk.CarregaToken(1, Request.Cookies["token"].Value));
StringBuilder sbSelect = new StringBuilder();
string selectx = "SELECT top 10 San_Chave.Chave_Id, San_Chave.Usuario_Id, San_Chave.Credenciada_Id, San_Chave.Usuario_Id_Responsavel, San_Chave.DataHora, San_Chave.Transacao, "
"San_Chave.Cliente_Id, San_Chave.DataHoraPegou, San_Chave.DataHoraDevolverPrevisao, San_Chave.DataHoraEntregou, San_Chave.HorasDevolucao, "
"San_Chave.NomeResponsavel, San_Chave.CpfResponsavel, San_Chave.RgResponsavel, San_Chave.TelResponsavel, San_Chave.Tel2Responsavel, "
"San_Chave.Endereco, San_Chave.Devolvido, San_Chave.TextoDevolucao, San_Usuario.NomeCompleto AS NomeUsuarioVenda, view_Cliente.NomeCliente "
"FROM San_Chave "
"JOIN San_Usuario "
"ON San_Chave.Usuario_Id_Responsavel = San_Usuario.Usuario_Id "
"LEFT OUTER JOIN view_Cliente "
"ON San_Chave.Cliente_Id = view_Cliente.Cliente_Id "
"where (San_Chave.Devolvido = 0 or San_Chave.Devolvido is NULL) ";
sbSelect.Insert(0, selectx);
if (Acesso == 0)
{
sbSelect.Append(" and San_Chave.Credenciada_Id = " Credenciada);
}
if (Request.QueryString["data"] != null)
{
sbSelect.Append(" and ( San_Usuario.NomeCompleto like '%" Request.QueryString["data"].ToString() "%' or San_Chave.DataHoraPegou like '%" Request.QueryString["data"].ToString() "%' or San_Chave.NomeResponsavel like '%" Request.QueryString["data"].ToString() "%' or view_Cliente.NomeCliente like '%" Request.QueryString["data"].ToString() "%' )");
}
if (Request.QueryString["transacao"] != null)
{
sbSelect.Append(" and San_Chave.Transacao = " Convert.ToInt32(Request.QueryString["transacao"]));
}
#endregion
dsChave.SelectCommand = sbSelect.ToString();
}
Моя разметка
<%@ Page Title="" Language="C#" MasterPageFile="~/San/masterPage/San.Master" AutoEventWireup="true" CodeBehind="ListaChaves.aspx.cs" Inherits="Ui.San.Chaves.ListaChaves" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="contentConteudo" runat="server">
<div class="divLightBox" title="Devolução de Chave" id="DevolucaoBox"></div>
<%--Aqui vem o Topo de Informaçoes da Lista--%>
<div id="InfoLista">
<div id="InfoListaDados">
<div id="InfoListaTabela">
<table width="640" border="0" cellspacing="0" cellpadding="0"
style="margin-right: 0px">
<tr>
<td width="189" align="left" style="width: 440px">
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td >
<input id="InputBusca" type="text" value="Procurar Chaves: Nome responsável ou data" /></td>
<td width="75"><img src="../tema/_Internas/imgs/btnBusca.jpg" id="btnBuscar" style="cursor:pointer;"/></td>
</tr>
</table>
</td>
<td width="40" align="right">
<table border="0" cellspacing="0" cellpadding="3" style="width: 69px">
<tr align="center">
<td>
<img alt="" class="style4" src="../tema/_Internas/icons/date.png" /></td>
</tr>
<tr class="FonteLegenda">
<td align="center">Marcar Entrega</td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="189" colspan="2" align="left" style="width: 440px">
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td>
Transação:
<select id="transacao">
<option value="0">Venda/Aluguel</option>
<option value="1">Venda</option>
<option value="2">Aluguel</option>
</select>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
</div>
</div>
<div>
<p><strong>Exibindo resultado por</strong></p>
<p><strong>Responsável ou data</strong>: <%= buscaData(Request.QueryString["data"])%> </p>
<p><strong>Tipo de Transação</strong>: <%= buscaTransacao(Request.QueryString["transacao"])%></p>
</div>
<asp:ListView ID="lv_chave" runat="server" DataSourceID="dsChave"
EnableModelValidation="True" DataKeyNames="Chave_Id" >
<EmptyDataTemplate>
<table id="Table1" runat="server" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>
nada encontrado
</td>
</tr>
</table>
</EmptyDataTemplate>
<GroupTemplate>
<tr ID="itemPlaceholderContainer" runat="server">
<td ID="itemPlaceholder" runat="server">
</td>
</tr>
</GroupTemplate>
<ItemTemplate>
<table width="680" border="0" cellspacing="0" cellpadding="0" id='boxCliente_<%# Eval("Chave_Id") %>'>
<tr>
<td>
<div class="BoxDeDados <%# Eval("Chave_Id") %>">
<div id="transacao_Id" style="display:none;"><%# Eval("Transacao")%></div>
<div id="imovel_Id" style="display:none;"> <%# carregaImovel_Id(Eval("Chave_Id").ToString())%></div>
<div id="cliente_Id" style="display:none;"> <%# Eval("Cliente_Id")%> </div>
<div class="BoxBarraTitulo">amp;nbsp;amp;nbsp;Expira em <%# Eval("HorasDevolucao")%> Hsamp;nbsp;amp;nbsp;amp;nbsp;Transação:</b> <%# transacao(Eval("Transacao").ToString()) %></div>
<table width="676" border="0" cellspacing="0" cellpadding="0" class="TxtInter2">
<tr>
<td width="225" height="36" bgcolor="#F4F0EF" >
amp;nbsp;<b>Data de retirada:</b><br />
amp;nbsp;<%# Dt(Eval("DataHoraPegou").ToString(),"dddd dd/MM/yyyy") %>- <b><%# Dt(Eval("DataHoraPegou").ToString(),"HH:mm") %></b>
</td>
<td width="393" bgcolor="#F4F0EF">
amp;nbsp;<b>Previsão de devolução:</b><br />
amp;nbsp;<%# Dt(Eval("DataHoraDevolverPrevisao").ToString(), "dddd dd/MM/yyyy")%>- <b><%# Dt(Eval("DataHoraDevolverPrevisao").ToString(), "HH:mm")%></b>
</td>
<td width="58" bgcolor="#F4F0EF" align="center"><b>Editar<br>Status:</b></td>
</tr>
<tr>
<td height="27">
amp;nbsp;<span class="TxtInter3"><b>Responsável: </b><%# Responsavel(Eval("Transacao").ToString(), Eval("NomeResponsavel").ToString(), Eval("NomeUsuarioVenda").ToString())%></span>
</td>
<td align="center">
<%# carregaChaves(Eval("Chave_Id").ToString())%>
</td>
<td align="center" valign="top"><%# Icon(Eval("Chave_Id").ToString())%></td>
</tr>
</table>
</div>
</td>
</tr>
</table>
</ItemTemplate>
<LayoutTemplate>
<table ID="groupPlaceholderContainer" runat="server" border="0" style="">
<tr id="Tr1" runat="server" style="">
<th id="Th1" runat="server"></th>
</tr>
<tr ID="groupPlaceholder" runat="server">
</tr>
</table>
</LayoutTemplate>
</asp:ListView>
<asp:SqlDataSource ID="dsChave" runat="server"></asp:SqlDataSource>
</asp:Content>
Комментарии:
1. Можете ли вы показать какой-нибудь код, вы что-нибудь кэшируете?
2. @V4Vendetta следуйте моему коду. Это без кэша, как вы можете видеть в моем методе.
3. Вы пробовали это в разных браузерах?
4. Я пытаюсь сделать это прямо сейчас, проблема возникает в IE 9, потому что в FireFox 7 работает нормально.
5. Пожалуйста, пожалуйста, пожалуйста, прочитайте эту ссылку … msdn.microsoft.com/en-us/library/ms161953.aspx
Ответ №1:
Как следует из комментариев, я думаю, браузер предоставляет вам кэшированную версию страницы, чтобы избежать этого в IE9, перейдите к
- Свойства обозревателя
- Нажмите «Настройка» в истории просмотра
- Выберите опцию Каждый раз, когда я посещаю веб-страницу
Поскольку он отображает кэшированную версию page_load
, ваша страница не отображается. Еще несколько советов
Это должно сработать для вас.
Ответ №2:
Page_Load
всегда выполняется, поскольку является частью жизненного цикла страницы. Если вы не нажимаете Page_Load
каждый раз; это, вероятно, потому, что ваша страница кэшируется.
На самом деле, свойство IsPostback
позволяет вам определить, нажимаете ли вы Page_Load
(или любой другой метод) во второй раз или нет, чтобы позволить вам выполнять код без необходимости, когда это должно произойти только один раз, когда вы нажимаете на свою страницу. Это свойство будет установлено только true
тогда, когда обратная передача происходит на той же странице. В сценарии, подобном описанному вами, IsPostback
должно быть false
, что означает, что с еще большей причиной ваш код должен выполняться, если он был заключен в if(!IsPostBack)
блок, но он не будет выполняться в первый раз, если он заключен в if(IsPostback)
ОБНОВИТЕ теперь, когда вы опубликовали некоторый код…
Это происходит потому, что ваша страница кэшируется.
Не добавляйте строки для построения ваших операторов SQL; вы подвергаете свой веб-сайт атаке с использованием SQL-инъекций; среди многих других недостатков этого подхода.
Используйте параметризованные запросы; или создайте сохраненные процедуры, если можете.
Комментарии:
1. Но в моем коде нет ничего, что устанавливало бы мой кэш на эту страницу.
2. @Lucas ..Тогда, вероятно, ваш браузер бесполезно оптимизирует запрос, просто используя свою собственную кэшированную страницу…
3. Проблема, которую я видел в IE 9, и прямо сейчас я попробовал FireFox 7, и был вызван метод Page_load, но в IE 9 нет.
4. @Icarus Почему моя страница кэшируется? Я не устанавливал это для своей страницы, и в FireFox все работает нормально.
5. @Lucas_Santos опубликуйте разметку, посмотрите настройки вашего браузера и т. Д. Но у вас есть более серьезные проблемы. Посмотрите на мое обновление.
Ответ №3:
Один из самых простых способов остановить кэширование вашей страницы — добавить директиву в aspx-файл:
<%@ OutputCache Location="None" ... %>