【问题标题】:Is it possible to set localStorage or Session variable in asp.net page and read it in javascript on the other page?是否可以在 asp.net 页面中设置 localStorage 或 Session 变量并在其他页面上用 javascript 读取它?
【发布时间】:2013-10-24 09:20:58
【问题描述】:

如题。是否可以在localStorage的asp.net页面中设置变量并在其他页面上检索它?

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

localStorage.getItem('UserID');

【问题讨论】:

  • 本地存储不是 ASP.NET,它是一个 Web 浏览器 API。您使用 javascript 来处理它。至于您的 Session 问题,如果您已经构建了一些东西来回答这些请求,您总是可以向服务器发出请求以获得您通常想要的任何值。那么......你的问题是什么?

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


【解决方案1】:

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

【讨论】:

  • string myScriptValue = "function callMe() {alert('You press Me!'); }"; ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "myScriptName", myScriptValue, true);但我不认为将代码和 javascript 混合是一个好主意 - 只是一个建议。每当您需要对 javascript 进行简单的更改/更新时,您都必须重新构建您的项目,这意味着重新部署而不是简单地推出单个 .js 文件。
  • 我试过这种方式,但它需要回发。就我而言,这是不可能的。感谢您的回答;)
  • 您可以从 ASP .Net 输出 Javascript,因此可以在 Javascript 中完成的任何事情都可以在 ASP .Net 中完成
【解决方案2】:

旧帖是的,但知识总是好的。

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

从服务器端试试这个

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

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

【讨论】:

    【解决方案3】:

    我通过使用 cookie 做到了这一点:

    Default.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;
    }
    

    【讨论】:

      【解决方案4】:

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


      B.aspx

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

      【讨论】:

      • 第二个页面不是.aspx页面,只有html + js。
      • 是的,html+js也可以。
      【解决方案5】:

      你可以使用asp:HiddenField

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

      【讨论】:

        【解决方案6】:

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

        • 将 blazor 组件添加到项目中
        • ProtectedLocalStorageProtectedSessionStorage 注入到组件中
        • 使用GetAsync&lt;T&gt;SetAsync&lt;T&gt; 方法在本地存储中存储和检索数据。任何对象类型都可以与 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";
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2014-07-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-22
          • 1970-01-01
          • 1970-01-01
          • 2017-05-21
          相关资源
          最近更新 更多