是否可以在asp.net页面中设置localStorage或Session变量,并在另一页的javascript中读取它?

时间:2013-10-24 09:20:58

标签: c# javascript asp.net local-storage session-variables

如有疑问。是否可以在localStorage中的asp.net页面中设置变量并在另一页上检索它?

如何在asp.net中设置localStorage变量。可能吗? 之后我可以使用:

读取变量
localStorage.getItem('UserID');

6 个答案:

答案 0 :(得分:7)

我想你不能。本地存储的全部意义在于它是本地的,你只能从javascript操作它。如果您需要在服务器和客户端之间传递值您需要使用一些传输技术 - cookie,ajax调用,隐藏字段等。这将取决于您的应用程序的组织方式,存储的信息类型,数量,是否你想要重定向或不重定向,但在所有情况下都应该使用javascript来完成,因为这是访问存储在localStorage中的数据的唯一方法。

答案 1 :(得分:4)

老帖子是的,但知识总是好的。

您可以从asp.net(间接)设置本地或会话存储。由于我们可以在asp.net中设置javascript代码并插入到客户端,因此会话或本地存储没有区别。

从服务器端尝试此操作

string script = string.Format("sessionStorage.userId= '{0}';", "12345");
ClientScript.RegisterClientScriptBlock(this.GetType(), "key", script, true);

这会将会话(您可以执行本地)存储变量设置为值12345。

答案 2 :(得分:2)

我认为在页面&中设置会话变量可以在另一页的javascript中读取变量。但是,如果你正在寻找那些不会成为的本地存储。它需要javascript。对于会话变量,例如
A.aspx

  

<%Session ["用户名"] ="唐老鸭&#34 ;; %GT;

B.aspx

>  <script type="text/javascript">
>       var user = "<%= Session["username"] %>";
>       document.write(user);
>  </script>

答案 3 :(得分:2)

我是通过使用cookies完成的:

Default.aspx.cs代码背后:

HttpCookie userIdCookie = new HttpCookie("UserID");
userIdCookie.Value = id.ToString();
Response.Cookies.Add(userIdCookie);
Response.Redirect("~/ImagePage.html");

没有设置HttpCookie Expires。它会在会话中失效。

html page 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;
}

答案 4 :(得分:1)

目前可以使用带有 ProtectedBrowserStorage 的 Asp.Net Core 和 Blazor 组件获得纯 C# 解决方案。

  • 向项目添加 blazor 组件
  • ProtectedSessionStorageGetAsync<T> 注入组件
  • 使用 SetAsync<T>@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"); } } 方法在本地存储中存储和检索数据。任何对象类型都可以与 T 一起使用。
  • Blazor 组件也可以在 Razor Pages 和 MVC 项目中使用。

设置本地存储组件

@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";
    }
}

读取本地存储组件

int socketTimeout = 40000; // set 40 seconds timeout value
RetryPolicy policy = new DefaultRetryPolicy(socketTimeout,                 
                                            DefaultRetryPolicy.DEFAULT_MAX_RETRIES,     
                                            DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);

答案 5 :(得分:0)

您可以使用asp:HiddenField

在更改localstoragesessionStorage后,您将隐藏字段填充并在后面的代码中使用。