无法通过<%= variable%>访问JS / jQuery中的变量

时间:2015-08-27 13:57:51

标签: javascript c# jquery asp.net

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

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

这是一个片段:
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的值始终为“&lt;%= CurrentUser%&gt;”。

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

JS文件中的C#代码未执行 - 因此值仍为<%= CurrentUser %>。您可以根据需要执行以下操作:

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

答案 1 :(得分:2)

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

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

1。隐藏的字段

e.g。对于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注入全局变量值:

HTML:

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

JQuery的:

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

我在Razor布局文件中使用这最后一种技术只是为了一个简单的目的。在当前网站上注入站点根URL,以便它可用于任何相对的Ajax调用:

e.g。在Razor布局文件中

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

答案 2 :(得分:0)

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