2012-04-11 57 views
1

更新:如何動態ID傳遞給函數的JQuery

在我的後臺代碼

我有公共varaible和assing這樣

public string Id { get { return Request.QueryString["id"].ToString(); } }` 

在.aspx頁面中我試圖訪問

$(this).attr("EmployeeId", Id); 

得到錯誤的名稱

'Id' does not exist in the current context 

末更新

我有兩個aspx頁面:

1) employee.aspx 
2) employee_detail.aspx 

如何從一個頁面傳遞的動態ID到另一個頁面

下面的代碼是在employee.aspx

//more code here.. 
//but to relvant to my question is here... 

var submitButton = function() {    
    //more code here...   
    if(employeeId != ""){ //redirecting here... 
    window.location.href = "employee_detail.aspx"; 
}  
} 

所以在employee_detail.aspx頁我有一個jQuery的功能,目前我是硬編碼ID 是這樣的:

<script type="text/javascript"> 

$(document).ready(function() { 

var id = 'A42345'; //hardcoded.... 

$(this).attr("EmployeeId", id); 

</script> 

所以我的問題是,我期待一種從employee.aspx傳遞一個ID和employee_detail.aspx

收到我想這樣做,但出於安全原因,我不要公開中的id網址:

window.location.href = "mypage.aspx?id = " + id; 
+0

您可以使用EmployeeId值創建隱藏的輸入字段。然後,ID將與表單值一起提交。 – svlada 2012-04-11 19:55:09

+1

如果將URL包含在URL查詢字符串中,則需要擔心安全問題,因此根本不應該在客戶端傳遞它(例如:通過Javascript),因爲Javascript處理的任何數據都可以通過客戶。 – Aaron 2012-04-11 19:57:56

回答

0

你應該認真考慮在會話變量實現會話和存儲用戶ID,而不是周圍的手動傳遞像這樣。閱讀:http://msdn.microsoft.com/en-us/library/ms178581.aspx

但是,如果你堅持,你可以使用jQuery將數據發佈到第二頁,而不是使用GET,然後在服務器(ASP)端,將POST變量值回顯到Javascript中。

+0

會話的問題在於,您無法在拖曳窗口中使用不同查詢的同一頁面。具有相同名稱的會話將重新編寫會話內容。 – Jay 2012-04-11 20:37:34

0

你可以結合你的動態代碼在JavaScript像(和順序應該是這樣的)請注意,即時通訊使用ASP經典。

<% 
Dim ID 
ID = Request.QueryString("id") 'Or any other request 
%> 

<script type="text/javascript"> 
var id = '<%=id%>'//OR any dynamic request 
$(this).attr("EmployeeId", id); 
</script> 
+0

CS1955:非可調用成員'System.Web.HttpRequest.QueryString'不能像方法一樣使用。 – 2012-04-11 20:03:32

+0

如果你的.js文件中有你的javascript代碼,它不會以這種方式工作,但是如果你的代碼在動態頁面中,比如.asp,.php等,它將會起作用。即使你可以使用記錄集,如var id = <%= rs(「name」)%>。 – Jay 2012-04-11 20:12:52

+0

更新了我的問題 – 2012-04-11 21:16:08

0

試試這個方法:

$.ajax({ 
      type: "POST", 
      contentType: "application/json; charset=utf-8", 
      url: "employee_detail.aspx", 
      dataType: "json", 
      data: { id: 1 }, // or the string: 'id=1' 
      complete: 
      function() { 
       window.location = "employee_detail.aspx"; 
      } 

    }); 

http://api.jquery.com/jQuery.ajax/

+0

我不是發佈頁面,我只是重定向到一個頁面,並在接收端我正在尋找一種方式來獲得我傳遞的價值。 – 2012-04-11 19:59:34

+0

然後你必須使用會話變量。 – coder 2012-04-11 20:00:22

0

您可以使用Ajax在你的服務器代碼一個WebMethod。在Web方法,你可以用HttpContext.Current

$.ajax({ 
    type: "POST", 
    url: "mypage.aspx/ServerMethodName",  
    data: '{"id":"' + $("#divID").text() + '"}',   
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function (returnValueFromServerMethod) { 
     if(returnValueFromServerMethod.d != "") 
      //do something great 

    } 
}); 

[WebMethod] 
public static string ServerMethodName(string id) 
{ 
    HttpContext.Current.Session["ID"] = id;    
} 

您需要在您的page.aspx添加,使頁面方法訪問會話。

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">      
</asp:ScriptManager> 

你可以用一個更簡潔的服務.svc替換頁面方法的東西。

0

那麼,如果你只是想傳遞一個變量,cookies就可以完成這項工作。顯然,這不是一種存儲數據的安全手段,但爲普通用戶提供了一個不可見的層。

https://github.com/carhartl/jquery-cookie

這個插件是非常小的,簡單的...

設置在第一頁上的cookie:

$.cookie('the_cookie', 'the_value'); 

$.cookie('the_cookie', 'the_value', { expires: 7 }); 

而獲得下一頁上的值:

$.cookie('the_cookie'); 
0

我過去喜歡使用的選項包括向正在加載的頁面提交表單。該表單有一個隱藏字段,其中包含JavaScript想要傳遞給頁面的JSON數據。服務器然後查找JSON數據,解析它並使用它包含的值。

這有點類似於ASP的視圖狀態和/或會話,但是工作時不需要視圖狀態或會話打開。