我正在尝试从JavaScript / jQuery访问asp.net变量(c#)。
我找到了一个解决方案here和here。但不幸的是,这些对我不起作用。
这是一个片段:
的 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;”。
有什么想法吗?
答案 0 :(得分:3)
JS文件中的C#代码未执行 - 因此值仍为<%= CurrentUser %>
。您可以根据需要执行以下操作:
答案 1 :(得分:2)
您应该将客户端使用所需的任何值注入页面,而不是注入JavaScript。如果您使用聪明的脚本技术(例如,从视图生成JS文件),则会使“页面”(脚本)的所有可能缓存无效,这对网站的商业部署有严重影响。
通常,您将使用输入type="hidden"
或将data-
属性值注入关键DOM元素(如body
)。您可以非常简单地从JavaScript / jQuery中选择它们:
e.g。对于id="currentuser"
HTML:
<input id="currentuser" type="hidden" value="<% =CurrentUser %>"/>
JQuery的:
$(document).ready(function (){
var _currentUser = $('#currentuser').val();
...
});
data-
属性或将值作为data-
属性添加到关键DOM元素上,例如在body
元素
HTML:
<body data-currentuser="<% =CurrentUser %>">
JQuery的:
$(document).ready(function (){
var _currentUser = $('body').data('currentuser');
...
});
最糟糕的是,在页面顶部有一小段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元素中,它将起作用。