我正在嘗試將我的 aspx 頁面中的文本框控制元件的值設定為標簽文本的值。我正在使用以下代碼,但沒有任何反應。我已經嘗試使用 c# 從檔案后面的代碼中嘗試,然后我想將文本框值分配給會話變數。如果我只是分配一個像“Hello”這樣的字串值,它會起作用,但否則什么都不起作用。
所以這是標記:
<asp:Label ID="blbtest" runat="server" ClientIDMode="Static">
</asp:Label>
<asp:Button ID="btnBook" runat="server" Text="Book Now"
CssClass="spaces-info__button" OnClick="btnBook_Click"/>
<asp:TextBox ID="txtmtcid" runat="server">
</asp:TextBox>
后面的代碼:
protected void Page_Load(object sender, EventArgs e)
{
if (!(Session["username"] == null))
{
string usn = Session["username"].ToString();
lblusn.Text = usn;
}
}
protected void btnBook_Click(object sender, EventArgs e)
{
txtmtcid.Text = blbtest.Text;
Session["mtcid"] = txtmtcid.Text;
Response.Redirect("booknow.aspx");
}
更新的js:
$(function () {
//dom is ready
var request = new XMLHttpRequest;
var usn = document.getElementById('lblusn').innerHTML;
console.log(usn);
request.open('GET', "URL" usn ""); //of course I have replaced
the URL here
request.onload = function () {
var response = request.response;
var parsedData = JSON.parse(response);
console.log(parsedData);
var nm = parsedData.fullName;
document.getElementById('lblfullnm').innerHTML = nm;
var mtcid = parsedData.employeeCode;
document.getElementById('blbtest').innerHTML = mtcid;
document.getElementById('txtmtcid').value =
document.getElementById('blbtest').innerHTML
};
request.send();
});
我是 js 和 asp.net 的新手,所以嘗試瀏覽所有可能的內容并在這里解決問題。會話變數值只是沒有傳遞到下一頁。老實說,我不需要文本框,我不知道標簽文本是否可以存盤在會話變數中。如果可能的話,那么我要做的就是將 blbtest 標簽文本分配給會話變數,但這也不起作用,但是如果我像這樣硬編碼它:
Session["mtcid"]="D-11234"
這有效并且會話變數的值被傳遞。
因此我現在正在嘗試使用文本框。如果有更好的方法,請告訴我。
如果有辦法避免使用標簽和文本框,只需將會話變數 Session["username"] 從后面的代碼傳遞給 javascript,那就太好了。我該怎么做?
這是我之前的帖子,由于沒有得到太多幫助,我正在重新發布。我意識到單擊按鈕時,標簽控制元件和 Session 變數中的值會丟失,我該如何處理?
uj5u.com熱心網友回復:
好的,讓我們再來看看這個。
老實說,我不需要文本框,我不知道標簽文本是否可以存盤在會話變數中
好的,那么它在會話中,所以你跳轉到的下一頁并不關心,或者必須知道有關當前頁面的任何資訊,對嗎?如果會話中的值是 ALEADY,那么我們為什么要關心這個當前頁面呢?
您發布的 js 例程的目標是什么?這看起來像一個網路方法呼叫?為什么,這應該做什么?
當我們已經承認服務器會話具有該值時,為什么還要將 usn 與那個“post”例程一起傳遞給服務器?
后面的代碼可以自由使用該 session() 值,那么為什么將 usn 傳遞給某個服務器端例程呢?我不明白這里的目標。也許你呼叫了一些 web 方法,但是 web 方法使用了 session,所以這就引出了一個問題,為什么 usn 在那個 url 和 web 方法中被傳遞?為什么???
我不知道標簽文本是否可以存盤在會話變數中
當然可以。但是 100 美元的問題是頁面中的客戶端代碼是否需要使用該值?這確實是這里的問題。如果是這樣,那么您可以將該值放入標簽、文本框中,或者更常見的是使用隱藏欄位控制元件。(它們都可以使用 - 但如果您不想在頁面上顯示該值,那么您可以“隱藏”標簽或文本框(style="display:none"),但隱藏欄位會更好因為它已經被隱藏了。
因此,發送 session() 值并將其放入客戶端標記的唯一原因是本地 js 代碼(而不是服務器端代碼)是否需要該值。
由于值在 session() 中,那么任何型別的導航到任何其他頁面?它可以在 session() 中使用該值。您無需在某些 URL 引數或其他任何內容中傳遞值。
因此,不清楚該值是否需要客戶端。我想,我必須假設某個地方,以及一些需要在客戶端 js 代碼中使用該值的地方。
或者,也許客戶端代碼需要更改這個值,然后需要將該值傳遞到下一頁?
那么,如果我們需要在客戶端使用/查看/擁有該會話值呢?
好吧,那么說我們有這個簡單的標記:
3 個按鈕。一種按原樣顯示標簽值。
一鍵更改標簽值(100% 客戶端代碼)。
您可以單擊第三個按鈕,它將獲取這個(可能的)標簽值,并將其推回會話中。
也許您沒有掌握客戶端代碼和服務器端之間的區別?
無論如何,所以我們有了這個(我正在使用 jQuery - 它通常默認安裝,它確實使客戶端控制元件的參考變得更加容易。(并且它應該默認安裝在您的專案中)。
所以,這是我們的標記:
<asp:Label ID="blbtest" runat="server" ClientIDMode="Static">
</asp:Label>
<br />
<asp:Button ID="cmdShow" runat="server" Text="Show label value - client side code"
OnClientClick="showlvalue();return false" CssClass="btn"
/>
<br />
<asp:Button ID="cmdchange" runat="server" Text="change client side label value"
OnClientClick="changevalue();return false" CssClass="btn"
/>
<br />
<asp:Button ID="cmdJump" runat="server" Text="Jump to next page with modifed lable into session" OnClick="cmdJump_Click" />
<script>
function showlvalue() {
alert($('#blbtest').text())
}
function changevalue() {
var sNew = prompt("enter new value for label")
$('#blbtest').text(sNew)
}
</script>
我們背后的代碼是這樣的:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Session["FunTest"] = "this is session";
blbtest.Text = Session["FunTest"] as string;
}
}
protected void cmdJump_Click(object sender, EventArgs e)
{
// take lable value - shove back into session
Session["FunTest"] = blbtest.Text;
Response.Redirect("WebForm2.aspx");
}
所以,現在我們有了這個:

好的,讓我們點擊第一個按鈕,我們得到這個:

現在,讓我們點擊第二個值,更改標簽(但是,它只發生在客戶端)

因此,在“zoo zoo zoo”上方,當我點擊確定時,它會將結果推回標簽中。(但它仍然不在 session() 中)。
我們現在有這個:

所以,此時,瀏覽器和這個標記仍然是 100% 的客戶端——我們還沒有與服務器互動。我們必須小心,因為任何標準按鈕點擊都會觸發頁面加載事件,然后運行你的代碼存根。但是,我們擁有所有重要的 !IsPostBack 代碼測驗和存根 - 擁有該代碼存根至關重要,并且我所有頁面的 99% 都使用該代碼存根進行設定。如果我不使用該 ispostback 檢查,那么當我們單擊上面的第三個按鈕時,頁面加載事件會首先觸發,然后觸發我們的按鈕事件。因此,頁面加載總是觸發每個服務器端回發和按鈕事件(或任何其他事件)。
所以,此時我們改變了標簽——客戶端代碼。現在,我們可以點擊我們的第三個按鈕——服務器端按鈕。
請注意它如何從標簽中獲取值,將其推回 session(),然后我們跳轉到有問題的下一頁。該目標頁面現在當然可以使用 session(),因為我們將標簽中的值移動/推動/傳輸回會話。
并且要小心。如果我們在客戶端的按鈕是一個超鏈接,或者導航到第二個(目標)頁面而不是服務器端代碼,會發生什么?好吧,那么我們的標簽值將永遠不會回到會話中,因為我們必須在當前頁面中有一個回發。當前頁面回傳到服務器,運行后面的代碼(將標簽傳回 session(),然后我們執行 response.redirect 到下一頁。
顯然在上面,我們不能在沒有回帖的情況下跳轉到下一頁。
但是,我們能否在頁面上沒有任何控制元件且沒有標簽值的情況下 100% 作業并做到這一點?
當然,我們可以在頁面中添加 web 方法。我們可以撰寫一個 Web 方法來獲取該會話值。如果需要,我們甚至可以撰寫一個 Web 方法來修改 session() 值。
請注意,正如我建議的那樣,由于該標簽應該被隱藏,所以我建議放入 asp.net 隱藏欄位 - 它們對客戶端和服務器端都友好,并且對您隱藏。
但是,對于 jQuery,請記住:
for TextBox - use .val() to get (or set a text box)
for Label - use .text() to get (or set a label)
for hidden field, use .val()
和我們的目標頁面——我們基于點擊第三個按鈕跳轉到,它可以在標簽中顯示該會話值。
說這個標記:
<div>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</div>
以及第二頁的代碼
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (Session["FunTest"] == null)
{
// sesson not passed, so lets jump back to page 1
Response.Redirect("WebForm1.aspx");
}
else
{
Label1.Text = Session["FunTest"] as string;
}
}
}
編輯:獲取任何會話值 - 使用 web 方法作為字串
因此,您可以在 JavaScript 中簡單地呼叫您創建的自定義 Web 方法,而不是在頁面上設定一些值,并且使用兩個 Web 方法,您可以設定或獲取會話值。
現在,您可以為您的 Web 方法構建一個 asmx 頁面,但只需將這兩種方法直接放到我們現有的頁面中即可。
所以,為了測驗,我們有這個:
<div style="font-size:large;text-align:right;width:30%">
<p>enter Session key:
<asp:TextBox ID="TextBox1" runat="server" ClientIDMode="Static"></asp:TextBox>
</p>
<p>Enter Session value:
<asp:TextBox ID="TextBox2" runat="server" ClientIDMode="Static"></asp:TextBox>
</p>
</div>
<br />
<asp:Button ID="cmdSetValue" runat="server" Text="Send/save value to session" cssclass="btn"
OnClientClick="setSession();return false;" />
<asp:Button ID="cmdGetValue" runat="server" Text="Get a session value" CssClass="btn"
style="margin-left:25px"
OnClientClick="getSession();return false" />
<script>
function setSession() {
MyKey = $('#TextBox1').val()
MyValue = $('#TextBox2').val()
//MyURLMethod = "WebForm2.aspx/SetSession"
MyURLMethod = $(location).attr('pathname') "/SetSession"
$.ajax({
type: "POST",
url: MyURLMethod,
data: JSON.stringify({sKey: MyKey, sValue : MyValue}),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
alert('session value set')
},
error: function (xhr, status, error) {
var errorMessage = xhr.status ': ' xhr.statusText
alert('Error - ' errorMessage)
}
});
}
function getSession() {
MyURLMethod = $(location).attr('pathname') "/GetSession"
MyKey = prompt("What session key to get?")
$.ajax({
type: "POST",
url: MyURLMethod,
data: JSON.stringify({sKey : MyKey}),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (mydata) {
alert('session key value = ' mydata.d)
},
error: function (xhr, status, error) {
var errorMessage = xhr.status ': ' xhr.statusText
alert('Error - ' errorMessage)
}
});
}
</script>
我們后面的代碼不多,但是這個:
// using System.Web.Services;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
}
}
[WebMethod(enableSession:true)]
public static void SetSession(string sKey, string sValue)
{
HttpContext.Current.Session[sKey] = sValue;
}
[WebMethod(enableSession:true)]
public static string GetSession(string sKey)
{
return HttpContext.Current.Session[sKey] as string;
}
好的,那么現在有了上面的兩個例程,我們就可以設定一個值,或者從 sesson[] 獲取一個值,用 js 代碼來做。
我正在使用 jQuery,但你明白了這里的想法:
我們得到這個:

所以,我輸入“MyName”作為會話鍵,然后輸入我的名字,然后點擊我的第一個按鈕。
現在,我可以點擊第二個按鈕,我們得到這個:

好的,我明白了:

所以,我要說的是,您可以向頁面添加一些 Web 方法,并且這些 Web 方法可以自由獲取/獲取或設定會話值。
uj5u.com熱心網友回復:
我現在的腳本:<asp:Label ID="lblusn" runat="server" ClientIDMode="Static" style="display: none;"></asp:Label>
<script src="Scripts/script.js"></script>
<asp:HiddenField ClientIDMode="static" ID="hiddenmtcid" runat="server" />
<section>
<div >
<div >
<div >
<h2><asp:Label ID="blbtest" runat="server"
ClientIDMode="Static" style="display: none;"></asp:Label>
<asp:Label ID="lblfullnm" runat="server"
ClientIDMode="Static"></asp:Label>
</h2>
后面的代碼:
namespace LRC_Spaces_Booking_System
{
public partial class userdashboard : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//if (!(Session["username"] == null))
//{
// lblusn.Text = Session["username"].ToString();
//}
if (!IsPostBack)
{
if (Session["username"] == null)
{
// sesson not passed, so lets jump back to page 1
Response.Redirect("userlogin.aspx");
}
else
{
lblusn.Text = Session["username"] as string;
Session["mtcid"] = blbtest.Text;
}
}
}
protected void btnBook_Click(object sender, EventArgs e)
{
//lblusn.Text = hiddenusn.Value;
//Session["mtcid"] = hiddenmtcid.Value;
//Response.Redirect("booknow.aspx");
//// take lable value - shove back into session
Response.Redirect("booknow.aspx");
}
protected void Timer1_Tick(object sender, EventArgs e)
{
GridView1.DataBind();
}
}
Javascript:
$(function () {
//dom is ready
var request = new XMLHttpRequest;
var hiddenusn = document.getElementById('lblusn').innerHTML;
request.open('GET',"https://qr.mtc.edu.om/api/public/hrmsInfo/qZ3sDDUVdhvhFQgF5XSVeJPsPp3Hvy9E/" hiddenusn "");
request.onload = function () {
var response = request.response;
var parsedData = JSON.parse(response);
console.log(parsedData);
var nm = parsedData.fullName;
document.getElementById('lblfullnm').innerHTML = nm;
var mtcid = parsedData.employeeCode;
document.getElementById('blbtest').innerHTML = mtcid;
//console.log(document.getElementById('hiddenmtcid').value);
};
request.send();
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/476490.html
標籤:javascript 网 标签
