2014-01-08 4 views
3

У меня есть приложение 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 
+0

Каков тип вашей «только для данных» страницы? Aspx? IHttpHandler? – Nico

+0

Код в качестве примера будет полезен ... – Aristos

+0

Оба кажутся просто регулярными ASPX-страницами. Похоже, что оба имеют * доступ * к сеансу, но сеанс не инициализирован * с данными, которые вы ожидаете при запуске со страницы данных. Это верно? –

ответ

0

Возможно, вы можете попробовать использовать «мастер-класс» для обеих страниц. Обе страницы наследуются от вашего основного класса (который, в свою очередь, от Inherits System.Web.UI.Page), который имеет всю логику обработки сеанса.

Смежные вопросы