2013-08-16 2 views
1

Мне нужно добавить переменную в состояние сеанса, используя ajax, когда я пытаюсь сделать это. Это не сработало. Может кто-нибудь, пожалуйста, помогите мне в этом. когда я нажимаю на кнопку Это перенаправлять Travellerinfo.aspx страницаДобавление переменной сеанса в C# с использованием Ajax

Ниже мой test.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="test.aspx.cs" Inherits="hotelbeds.test" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<!doctype html> 
<html lang="en"> 
<head> 
<meta charset="utf-8" /> 
<title>jQuery UI Tooltip - Custom animation demo</title> 
<link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" /> 
<script src="http://code.jquery.com/jquery-1.9.1.js"></script> 
<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script> 
<link rel="stylesheet" href="/resources/demos/style.css" /> 
<script type="text/javascript"> 
    function testbook(hotelcode) { 

     $.ajax({ 
      type: "POST", 
      url: "test.aspx/addSession", 
      data: "{'hotelcode':'" + hotelcode + "'}", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (msg) { 
       window.location.href = "Hotelresul.aspx"; 
      }, 
      error: function (err) { 
       window.location.href = "TravellerInfo.aspx"; 
      } 
     }); 

    } 

</script> 
</head> 
<body> 
    <form id="form1" runat="server"> 

    <div> 

    </div> 
    </form> 
</body> 

</html> 

CS test.aspx

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data.SqlClient; 
using System.Web.Services; 
using System.Configuration; 
using System.Drawing; 

namespace hotelbeds 
{ 

    public partial class test : System.Web.UI.Page 
    { 

     protected void Page_Load(object sender, EventArgs ea) 
     { 
      ImageButton testbtn = new ImageButton(); 
      testbtn.OnClientClick = "testbook('15000')"; 
      form1.Controls.Add(testbtn); 

     } 
     [WebMethod(EnableSession = true)] 
     public static void addSession(String hotelcode) 
     { 
      HttpContext.Current.Session.Add("hotelcode", hotelcode); 

     } 


    } 
} 
+0

Вы должны отлаживать метод 'addSession' (установить точку останова) и проверить, не вызвано ли оно. И сделайте его «публичным» аксессуром. – thmshd

+1

Вы можете сохранить WebMethod внутри страницы .aspx. Но метод должен быть общедоступным и статическим. См. Мой ответ. @RGraham –

ответ

6

Должно быть

[WebMethod (EnableSession=true)] 
     public static void addSession(String hotelcode) 
     { 
      HttpContext.Current.Session.Add("hotelcode", hotelcode); 

     } 

Обратите внимание: метод должен быть общедоступным, статическим и EnableSession атрибут должен быть правдой.

EDIT 1:

«возвращают ложь» добавляется, чтобы предотвратить функцию по умолчанию кнопки. Функция по умолчанию кнопки - отправить форму на сервер. Альтернативно, event.preventDefault() может использоваться для предотвращения функциональности по умолчанию.

<script type="text/javascript"> 
    function testbook(hotelcode) { 

     $.ajax({ 
      type: "POST", 
      url: "test.aspx/addSession", 
      data: "{'hotelcode':'" + hotelcode + "'}", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (msg) { 
       window.location.href = "Hotelresul.aspx"; 
      }, 
      error: function (err) { 
       window.location.href = "TravellerInfo.aspx"; 
      } 
     }); 


return false; 

    } 

</script> 

EDIT 2:

protected void Page_Load(object sender, EventArgs ea) 
     { 
      ImageButton testbtn = new ImageButton(); 
      testbtn.OnClientClick = "return testbook('15000')"; 
      form1.Controls.Add(testbtn); 

     } 
+0

Я пробовал ваш код, но все еще не работает. –

+0

нажмите ctrl + shift + J из своего браузера (хром) и выберите вкладку консоли. После выполнения (т.е. нажатие кнопки) код, пожалуйста, сообщите об ошибке. –

+0

см. Обновленный ответ –

-1

вам не нужно ни АЯКС, ни сеанса переменной, чтобы сделать это. Просто добавьте скрытое значение поля с кодом вашего отеля и используйте его для отправки.

Надеюсь, что ответ достаточно ясный.

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