是否可以在外部JavaScript文件中使用“ ”?
如果我使用代码
<%= someObject.ClientID %>
在我的as(c / p)x页面内的脚本标签中,它工作正常。在呈现的页面上,解析ClientID。但是,如果我放入一个外部JS文件,然后添加:
不是。有没有办法做到这一点,还是我将代码保留在as(c / p)x文件中?
侧面问题-在标记文件中执行的行为是什么?
这完全有可能。
在您的.aspx页面中,创建对aspx页面的脚本引用,其中包含您的javascript代码:
<script src="../MyJavaScriptFile.js.aspx" type='text/javascript'></script>
然后,在MyJavaScriptFile.js.aspx中,您可以编写以下内容:
<%@ Page Language="C#" AutoEventWireup="false" ContentType="text/javascript" %>
<%
var foo = new Whatever();
foo.ClientId = 123;
%>
// Start Javascript
var clientId = <% HttpContext.Current.Response.Write(foo.ClientId); %>;
。
也很有帮助-该技术支持querystring参数:
<script src="../MyJavaScriptFile.js.aspx?username=<% somevalue %>"
type='text/javascript'></script>
然后,在MyJavaScriptFile.js.aspx中,我可以使用]引用值>
var username = '<% Request.QueryString["username"] %>';
这不是做事的“最佳实践”方法,但是它完成工作的方式是穴居人的大脑可以理解的,而无需求助于变通方法。
如果您确实要执行此操作,则可以执行以下操作
<script type="text/javascript">
Application.init({variable1: "value1", variable2: "value2"...});
</script>
在页面上渲染大量javascript是不明智的做法,但是通常需要将初始化值从服务器传递给javascript。这使您无需大量不必要的代码,也不会使用回调函数污染全局名称空间。我通常将Application
替换为某些项目特定的全局包装器。
<div id="myContainer">
<asp:HiddenField ID="hdMyControl" runat="server" /></div>
在后面的代码中设置HiddenField的值
也要考虑的一件事-如果您要制作一个独立于ASPX页面的JS文件,那么该JS文件
绝对
不应假定对所调用的aspx文件的特定控件有任何了解。它-因为稍后其他人可能会决定,“哦,这是一个不错的JS文件,我也将其合并进来”,并且对他们而言不起作用,因为它们的对象将与您的对象不匹配。因此,您应该遵循的模式必须更加通用-因此,为什么要传递引用或标识符列表。<%= someObject.ClientID %>
,因为服务器标记是asp.net,而js不知道这是什么。如果使用ASP.NET 4,则可以在控件的属性中设置客户端ID以使其可预测。
如果您不使用ASP.NET 4,则可以将此客户端ID放在隐藏字段或内联js变量中。
var MyCallback = function () { };
然后在asp / cx中执行以下操作:
MyCallback = function () {return "<%= someObject.ClientID %>";}
document.getElementById("ctl00_ContentDetail_textboxelename").value = "";
document.getElementById("ctl00_ContentDetail_radioORcheckboxelename").checked = false;
document.getElementById("ctl00_ContentDetail_elename").style.visibility = "hidden";
var javaele = document.getElementById("ctl00_ContentDetail_elename");
var boolIsChecked = document.getElementById("ctl00_ContentDetail_radioORcheckboxelename").checked;