У меня есть приложение ASP.NET (VB.NET) с 2 страницами, «главная» страница и вторая страница «только для данных», единственная цель которой - быть целью данных AJAX для главной страницы, делая вызов базы данных и рендеринг результатов для jQuery (AJAX) .get(). Я использую переменную сеанса на главной странице, которую я хочу проверить для существования на странице только для данных, прежде чем она сделает свой вызов БД и отображает данные.ASP.NET AJAX и переменные сеанса
Я пробовал делать это напрямую, и это терпит неудачу. Из того, что я смог определить до сих пор, страница только для данных не может обнаружить переменную сеанса до тех пор, пока ее сессия не будет официально запущена (как-то с использованием session_start, по-видимому). Если это правильно, как мне начать сеанс на странице только для данных, когда он доступен только через вызовы AJAX с главной страницы? Мне определенно нужна страница, предназначенная только для передачи данных, которая будет восприниматься с учетом сеанса. Благодаря!
- Rick
Обе страницы ASP.NET. Я добавил ярлык на главную страницу для проверки (на странице_load и на отправке значения сеанса), что существует переменная сеанса и что это такое. Страница data_only возвращает сообщение yes или no (всегда нет), если оно обнаруживает наличие переменной сеанса.
Page код - main.aspx:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="main.aspx.vb" Inherits="main" %>
<!DOCTYPE html>
<html>
<head runat="server">
<title></title>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
</head>
<body>
<form id="form1" runat="server">
<asp:TextBox ID="txt_1" runat="server"></asp:TextBox>
<asp:Button ID="but_1" runat="server" Text="Add Session Variable" /><br />
<asp:Label ID="lbl_1" runat="server"></asp:Label><br /><br />
<asp:Button ID="but_2" runat="server" Text="Get Data" />
<asp:Label ID="lbl_2" runat="server"></asp:Label>
</form>
<script type="text/javascript">
$(document).ready(function() {
$('#but_2').on('click', function (event) {
event.preventDefault();
$.get("data_only.aspx", function (data) {
$('#lbl_2').text(data);
});
});
});
</script>
</body>
</html>
Code-Behind - main.aspx:
Partial Class main
Inherits System.Web.UI.Page
Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
Call Check_Session()
End Sub
Protected Sub but_1_Click(sender As Object, e As System.EventArgs) Handles but_1.Click
Session("var1") = txt_1.Text
Call Check_Session()
End Sub
Private Sub Check_Session()
Dim strSession = Session("var1")
If strSession Is Nothing Then
lbl_1.Text = "No Session variable."
Else
lbl_1.Text = "Session Variable = " & strSession
End If
End Sub
End Class
Page код - data_only.aspx:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="data_only.aspx.vb" Inherits="data_only" %>
<!DOCTYPE html>
<html>
<head runat="server">
<title></title>
</head>
<body></body>
</html>
Code-Behind - data_only.aspx:
Partial Class data_only
Inherits System.Web.UI.Page
Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
Dim strSession = Session("var1")
If strSession Is Nothing Then
Response.Write("No session variable.")
Else
' Database call occurs here
Response.Write("Success! Get data here.")
End If
Response.End()
End Sub
End Class
Каков тип вашей «только для данных» страницы? Aspx? IHttpHandler? – Nico
Код в качестве примера будет полезен ... – Aristos
Оба кажутся просто регулярными ASPX-страницами. Похоже, что оба имеют * доступ * к сеансу, но сеанс не инициализирован * с данными, которые вы ожидаете при запуске со страницы данных. Это верно? –