如何使用 javascript 将标签控件文本存储到文本框控件值中
how to store a label control text into a textbox control value using javascript
我正在尝试将 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,那就太好了。我该怎么做?
这是我以前的 post,我正在重新post,因为我没有得到太多帮助。我意识到在单击按钮时,标签控件和 Session 变量中的值丢失了,我该如何处理这个问题
我现在对我的项目进行了这些更改:
我现在的脚本:
<script src="Scripts/script.js"></script>
<asp:HiddenField ClientIDMode="static" ID="hiddenmtcid" runat="server" />
<section>
<div class="container">
<div class="row">
<div class="col-12 text-center coltitle">
<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();
});
好的,让我们再次尝试一下。
Honestly, i dont need the textbox, I dont know if label text can be stored in session variables
好吧,那就是session,所以你跳转到的下一页不在乎,还是得知道当前页什么的吧?如果该值在会话中为 ALEADY,那么我们为什么要关心当前页面?
你的 posted js 例程的目标是什么?这看起来像一个网络方法调用?为什么,它应该做什么?
当我们已经承认服务器会话具有此值时,为什么 usn 与“post”例程一起传递给服务器?
后面的代码可以自由使用该 session() 值,那么为什么将 usn 传递给某些服务器端例程?我没有抓住这里的目标。也许你调用了一些web方法,但是web方法使用了session,所以这就引出了一个问题,为什么在那个url和web方法中传递usn?为什么???
I dont know if label text can be stored in session variables
当然可以。但是 100 美元的问题是页面中的客户端代码是否需要使用该值?这确实是这里的问题。如果是这样,那么您可以将该值放入标签、文本框,或者更常见的是使用隐藏字段控件。 (它们都可以使用 - 但如果您不想在页面上显示该值,那么您可以“隐藏”标签或文本框 (style="display:none"),但隐藏字段会更好,因为它已经被隐藏了。
因此,发送该 session() 值并将其放入客户端标记的唯一原因是本地 js 代码(与服务器端代码相对)需要该值。
既然值在 session() 中,那么任何一种导航到任何其他页面?它可以在 session() 中使用该值。您零需要在某些 URL 参数或其他参数中传递值。
因此,不清楚客户端是否需要此值。我想,我必须假设一些地方,以及一些需要在客户端 js 代码中使用该值的地方。
或者,也许客户端代码需要更改这个值,然后那个值需要传递到下一个页面?
那么,如果我们需要 use/see/have 那个会话值客户端?
好吧,那么假设我们有这个简单的标记:
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 check,那么当我们点击上面的第三个按钮时,页面加载事件首先触发,然后是我们的按钮事件。因此,页面加载始终会触发每个服务器端 post-back 和按钮事件(或任何其他事件)。
因此,此时我们更改了标签 - 客户端代码。现在,我们可以单击我们的第三个按钮 - 服务器端按钮。
注意它如何从标签中获取值,将 BACK 推回 session(),然后我们跳转到下一个有问题的页面。该目标页面当然现在可以使用 session(),因为我们 moved/shoved/transferred 标签中的值返回到会话中。
并且要小心。如果我们在客户端的按钮是超级 link,或者导航到第二个(目标)页面而不是服务器端代码,会发生什么?好吧,那么我们的标签值将永远不会回到会话中,因为我们必须在当前页面中有一个 post-back。当前页面返回到服务器,代码在 运行s 之后(将标签传回 session(),然后我们执行 response.redirect 到下一页。
显然在上面,如果没有 post 返回,我们不能跳到下一页。
但是,我们能否在页面上没有任何控件且没有该标签 val 的情况下 100% 地执行此操作?e?
当然可以,我们可以在页面中添加网络方法。我们可以编写一个 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;
}
}
}
编辑:获取任何会话值 - 作为带有网络方法的字符串
因此,除了在页面上设置一些值,您还可以 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;
}
好了,现在有了上面两个例程,我们就可以设置一个值,或者获取一个值to-fromsesson[],用js代码实现
我正在使用 jQuery,但你明白这里的意思:
我们得到这个:
因此,我输入“MyName”作为会话密钥,然后输入我的名字,然后点击第一个按钮。
现在,我可以点击第二个按钮,我们得到这个:
好的,我明白了:
所以,我要说的是,您可以向页面添加一些 Web 方法,并且这些 Web 方法可以自由 get/grab 或设置会话值。
我正在尝试将 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,那就太好了。我该怎么做?
这是我以前的 post,我正在重新post,因为我没有得到太多帮助。我意识到在单击按钮时,标签控件和 Session 变量中的值丢失了,我该如何处理这个问题
我现在对我的项目进行了这些更改:
我现在的脚本:
<script src="Scripts/script.js"></script>
<asp:HiddenField ClientIDMode="static" ID="hiddenmtcid" runat="server" />
<section>
<div class="container">
<div class="row">
<div class="col-12 text-center coltitle">
<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();
});
好的,让我们再次尝试一下。
Honestly, i dont need the textbox, I dont know if label text can be stored in session variables
好吧,那就是session,所以你跳转到的下一页不在乎,还是得知道当前页什么的吧?如果该值在会话中为 ALEADY,那么我们为什么要关心当前页面?
你的 posted js 例程的目标是什么?这看起来像一个网络方法调用?为什么,它应该做什么?
当我们已经承认服务器会话具有此值时,为什么 usn 与“post”例程一起传递给服务器?
后面的代码可以自由使用该 session() 值,那么为什么将 usn 传递给某些服务器端例程?我没有抓住这里的目标。也许你调用了一些web方法,但是web方法使用了session,所以这就引出了一个问题,为什么在那个url和web方法中传递usn?为什么???
I dont know if label text can be stored in session variables
当然可以。但是 100 美元的问题是页面中的客户端代码是否需要使用该值?这确实是这里的问题。如果是这样,那么您可以将该值放入标签、文本框,或者更常见的是使用隐藏字段控件。 (它们都可以使用 - 但如果您不想在页面上显示该值,那么您可以“隐藏”标签或文本框 (style="display:none"),但隐藏字段会更好,因为它已经被隐藏了。
因此,发送该 session() 值并将其放入客户端标记的唯一原因是本地 js 代码(与服务器端代码相对)需要该值。
既然值在 session() 中,那么任何一种导航到任何其他页面?它可以在 session() 中使用该值。您零需要在某些 URL 参数或其他参数中传递值。
因此,不清楚客户端是否需要此值。我想,我必须假设一些地方,以及一些需要在客户端 js 代码中使用该值的地方。
或者,也许客户端代码需要更改这个值,然后那个值需要传递到下一个页面?
那么,如果我们需要 use/see/have 那个会话值客户端?
好吧,那么假设我们有这个简单的标记:
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 check,那么当我们点击上面的第三个按钮时,页面加载事件首先触发,然后是我们的按钮事件。因此,页面加载始终会触发每个服务器端 post-back 和按钮事件(或任何其他事件)。
因此,此时我们更改了标签 - 客户端代码。现在,我们可以单击我们的第三个按钮 - 服务器端按钮。
注意它如何从标签中获取值,将 BACK 推回 session(),然后我们跳转到下一个有问题的页面。该目标页面当然现在可以使用 session(),因为我们 moved/shoved/transferred 标签中的值返回到会话中。
并且要小心。如果我们在客户端的按钮是超级 link,或者导航到第二个(目标)页面而不是服务器端代码,会发生什么?好吧,那么我们的标签值将永远不会回到会话中,因为我们必须在当前页面中有一个 post-back。当前页面返回到服务器,代码在 运行s 之后(将标签传回 session(),然后我们执行 response.redirect 到下一页。
显然在上面,如果没有 post 返回,我们不能跳到下一页。
但是,我们能否在页面上没有任何控件且没有该标签 val 的情况下 100% 地执行此操作?e?
当然可以,我们可以在页面中添加网络方法。我们可以编写一个 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;
}
}
}
编辑:获取任何会话值 - 作为带有网络方法的字符串
因此,除了在页面上设置一些值,您还可以 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;
}
好了,现在有了上面两个例程,我们就可以设置一个值,或者获取一个值to-fromsesson[],用js代码实现
我正在使用 jQuery,但你明白这里的意思:
我们得到这个:
因此,我输入“MyName”作为会话密钥,然后输入我的名字,然后点击第一个按钮。
现在,我可以点击第二个按钮,我们得到这个:
好的,我明白了:
所以,我要说的是,您可以向页面添加一些 Web 方法,并且这些 Web 方法可以自由 get/grab 或设置会话值。