【问题标题】:Cant access Variables in JS/jQuery via <%= variable %>无法通过 <%= variable %> 访问 JS/jQuery 中的变量
【发布时间】:2015-11-21 22:55:07
【问题描述】:

我正在尝试从 JavaScript/jQuery 访问 asp.net 变量 (c#)。

我找到了解决方案,herehere。但不幸的是,这些对我不起作用。

这是一个 sn-p:
Default.aspx.cs

public partial class Default : System.Web.UI.Page
{
    public string CurrentUser { get; set; }
    protected void Page_Load(object sender, EventArgs e)
    {
        CurrentUser = User.Identity.Name.Split('\\')[1]; //I need the value of "CurrentUser"
    }
    ...
}


script.js

$(document).ready(function (){
    var _currentUser = "<% =CurrentUser %>"; // e.g. _currentUser = "minimen"
    ...
});

_currentUser 的值始终是“”。

有什么想法吗?

【问题讨论】:

  • @greg 那不是问题

标签: javascript c# jquery asp.net


【解决方案1】:

不执行 JS 文件中的 C# 代码 - 因此值保持为 &lt;%= CurrentUser %&gt;。要按照您的要求进行操作,您需要:

  • 在 ASPX 页面中执行此 JS 代码
  • 从返回所需信息的 JS 文件向服务器发出 AJAX 请求。

【讨论】:

    【解决方案2】:

    您应该将客户端使用所需的任何值注入页面,而不是注入 JavaScript。如果您使用巧妙的脚本技术(例如,从视图生成 JS 文件),您会取消所有可能的“页面”(脚本)缓存,这会对网站的商业部署产生严重影响。

    通常,您会使用输入 type="hidden" 或将 data- 属性值注入关键 DOM 元素(如 body)。你可以很简单地从 JavaScript/jQuery 中获取它们:

    1。隐藏字段

    例如对于 id="currentuser" 的隐藏字段

    HTML:

    <input id="currentuser" type="hidden" value="<% =CurrentUser %>"/>
    

    JQuery:

    $(document).ready(function (){
        var _currentUser = $('#currentuser').val();
        ...
    });
    

    2。 data-属性

    或将值作为data- 属性添加到关键 DOM 元素上,例如在body 元素上

    HTML:

    <body data-currentuser="<% =CurrentUser %>">
    

    JQuery:

    $(document).ready(function (){
        var _currentUser = $('body').data('currentuser');
        ...
    });
    

    3。在页面中注入全局变量

    最坏的情况,在页面顶部有一个小的 Javascript sn-p 注入全局变量值:

    HTML:

    <script>
        window.currentuser="<% =CurrentUser %>";
    </script>
    

    JQuery:

    $(document).ready(function (){
        var _currentUser = window.currentuser; // or just currentuser
        ...
    });
    

    我在我的 Razor 布局文件中使用最后一种技术仅用于一个简单的目的。在当前网站上注入站点根 URL,使其可用于任何相关的 Ajax 调用:

    例如在 Razor 布局文件中

    <script>
        window.siteRoot="@Url.Content("~/")";
    </script>
    

    【讨论】:

      【解决方案3】:

      您无法从单独的脚本文件中访问页面字段。将您的代码放在 Default.aspx 的 head 元素中,它将起作用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-11-21
        • 2017-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多