问题描述
|
我想从javascript文件内部获取ASP.NET控件的值。我知道当javascript位于aspx页面上而不是js文件中时如何执行此操作。例:
<head>
<script type=\"text/javascript\">
alert(\'<%= lbl_test.Text %>\'); //alerts the text of the ASP.NET label
</script>
<script type=\"text/javascript\" src=\"Scripts/test.js\" /> //alerts \"<%= lbl_test.Text\" %>
</head>
在此示例中,test.js中仅包含“ 1”。
无论如何,我是否可以在js文件的第一段javascript中重现该行为?
解决方法
您无法做到这一点,您将要么
从调用JavaScript文件中的函数的aspx页(某些.net页)中传递控件ID
要么
使您的脚本文件实际上是一个.net输出文件。然后,您可以嵌入代码。例如,将其命名为javscriptwhatever.aspx,但在后面的代码中将文件的内容类型设置为text / javascript,例如此处所述
http://social.msdn.microsoft.com/Forums/zh-CN/jscript/thread/c706d380-9688-4758-9d7e-9522d59d5855
, 作为对@Adam提供的内容的进一步建议,您可以考虑使用#include指令。使用这种方法,您应该应该能够将.js文件的代码包装在适当的
<script>
标记内,并通过#include参考将其“注入”:
<head>
<!--#include file=\"myScript.js\"-->
</head>
我没有测试过,这只是另一种可能性。我不也不一定会建议定期使用#include,并且在大多数情况下会避免使用它们。但是,如果您的选择很小,则可能会奏效。
我认为最好的选择是第一个建议,即修改脚本以接受来自本机语言的任何参数,以避免内联ASP.NET脚本和Javascript的混合使用。
, ASP.NET输出到Web浏览器的页面必然是标准的HTML / Javascript / CSS。 Javascript在Web浏览器的客户端上运行。因此,可以使用您可以在客户端上正常执行的Java脚本执行任何操作。
标签将作为跨度输出。因此,您可以执行以下操作:
function getLabelValue(lbl) {
if ( lbl.childNodes.length == 0 )
return null;
var textValue = \"\";
for ( var i = 0; i < lbl.childNodes.length; i++ )
{
if ( lbl.childNodes[0].nodeType == Node.TEXT_NODE )
textValue += lbl.childNodes[0].nodeValue;
}
return textValue;
}
var lbl = document.getElementById(\"lbl_test\");
var value = getLabelValue(lbl);
alert(value);