是否可以在页面中设置本地存储或会话变量 asp.net 并在另一页面上的javascript中读取它
本文关键字:一页 net javascript asp 读取 设置 会话 是否 存储 变量 | 更新日期: 2023-09-27 18:36:52
有问题。是否可以在 localStorage asp.net 页面中设置变量并在另一页上检索它?
如何在 asp.net 中设置本地存储变量。可能吗?之后,我可以使用以下命令读取变量:
localStorage.getItem('UserID');
我想你不能。本地存储的全部意义在于它是本地的,您只能从javascript操作它。如果您需要在服务器和客户端之间传递值,则需要使用一些传输技术 - cookie,ajax调用,隐藏字段等。这完全取决于您的应用程序的组织方式,存储的信息类型,其数量,是否要重定向,但在所有情况下,这都应该使用javascript完成,因为这是访问存储在localStorage中的数据的唯一方法。
旧帖子是的,但知识总是好的。
您可以从 asp.net(间接)设置本地或会话存储。由于我们可以在 asp.net 中设置javascript代码并插入到客户端,因此会话或本地存储没有区别。
从服务器端尝试一下
string script = string.Format("sessionStorage.userId= '{0}';", "12345");
ClientScript.RegisterClientScriptBlock(this.GetType(), "key", script, true);
这会将会话(您可以执行本地)存储变量设置为值 12345。
我通过使用cookie来做到这一点:
默认.aspx.cs代码隐藏:
HttpCookie userIdCookie = new HttpCookie("UserID");
userIdCookie.Value = id.ToString();
Response.Cookies.Add(userIdCookie);
Response.Redirect("~/ImagePage.html");
未设置 HttpCookie 过期。它默认过期与会话。
HTML 页面 JavaScript:
function OnLoad() {
var userId = getCookie('UserdID');
if (userId == null)
window.location = "http://localhost:53566/Default.aspx";
}
function getCookie(cookieName) {
var cookieValue = document.cookie;
var cookieStart = cookieValue.indexOf(" " + cookieName + "=");
if (cookieStart == -1) {
cookieStart = cookieValue.indexOf("=");
}
if (cookieStart == -1) {
cookieValue = null;
}
else {
cookieStart = cookieValue.indexOf("=", cookieStart) + 1;
var cookieEnd = cookieValue.indexOf(";", cookieStart);
if (cookieEnd == -1) {
cookieEnd = cookieValue.length;
}
cookieValue = unescape(cookieValue.substring(cookieStart, cookieEnd));
}
return cookieValue;
}
我认为在页面中设置会话变量并在另一个页面的javascript中设置读取变量是可能的。但是,如果您正在寻找本地存储,那就不是了。它需要javascript。对于会话变量,例如
A.aspx
<% 会话["用户名"]="唐老鸭"; %>
B.aspx
> <script type="text/javascript">
> var user = "<%= Session["username"] %>";
> document.write(user);
> </script>
您可以使用asp:HiddenField
更改localstorage
或sessionStorage
后,填充隐藏字段并在代码隐藏中使用。
C# 解决方案目前可以使用具有ProtectedBrowserStorage
Asp.Net 核心和 Blazor 组件。
- 将 blazor 组件添加到项目
- 将
ProtectedLocalStorage
或ProtectedSessionStorage
注入组件 - 使用
GetAsync<T>
和SetAsync<T>
方法存储和检索本地存储中的数据。任何对象类型都可以与 T 一起使用。 - Blazor 组件也可以在 Razor 页面和 MVC 项目中使用。
设置本地存储组件
@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage
@inject ProtectedLocalStorage LocalStorage
<button @onclick="async ()=> await SaveToLocalStorageAsync()">Save</button>
@code {
private const string _localStorage = "MyLocalStorage";
private async Task SaveToLocalStorageAsync()
{
await LocalStorage.SetAsync<string>(_localStorage, "text to be saved");
}
}
读取本地存储组件
@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage
@inject ProtectedLocalStorage LocalStorage
<p>@TxtFromLocalStorage</p>
@code {
private string TxtFromLocalStorage = string.Empty;
private const string _localStorage = "MyLocalStorage";
protected override async Task OnInitializedAsync()
{
var result = await LocalStorage.GetAsync<string>(_localStorage);
TxtFromLocalStorage = result.Success ? result.Value : "Can't read local storage";
}
}