是否可以在外部javascript文件中使用“”?

问题描述 投票:32回答:8

是否可以在外部JavaScript文件中使用“ ”?

如果我使用代码

<%= someObject.ClientID %>

在我的as(c / p)x页面内的脚本标签中,它工作正常。在呈现的页面上,解析ClientID。但是,如果我放入一个外部JS文件,然后添加:

不是。有没有办法做到这一点,还是我将代码保留在as(c / p)x文件中?

侧面问题-在标记文件中执行的行为是什么?

javascript asp.net ascx clientid
8个回答
20
投票

这完全有可能。

在您的.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"] %>';

这不是做事的“最佳实践”方法,但是它完成工作的方式是穴居人的大脑可以理解的,而无需求助于变通方法。


33
投票

如果您确实要执行此操作,则可以执行以下操作


3
投票
<script type="text/javascript"> Application.init({variable1: "value1", variable2: "value2"...}); </script>

在页面上渲染大量javascript是不明智的做法,但是通常需要将初始化值从服务器传递给javascript。这使您无需大量不必要的代码,也不会使用回调函数污染全局名称空间。我通常将Application替换为某些项目特定的全局包装器。


3
投票
<div id="myContainer"> <asp:HiddenField ID="hdMyControl" runat="server" /></div>

在后面的代码中设置HiddenField的值


1
投票
现在,当您的对象调用那些JS函数时,它们可以做的就是将对其自身的引用传递到该函数中,或者甚至使用您自己的键来传递某种字典列表,以获取控件的名称和所分配的名称。

也要考虑的一件事-如果您要制作一个独立于ASPX页面的JS文件,那么该JS文件

绝对

不应假定对所调用的aspx文件的特定控件有任何了解。它-因为稍后其他人可能会决定,“哦,这是一个不错的JS文件,我也将其合并进来”,并且对他们而言不起作用,因为它们的对象将与您的对象不匹配。因此,您应该遵循的模式必须更加通用-因此,为什么要传递引用或标识符列表。

1
投票
您不能在外部js文件中使用<%= someObject.ClientID %>,因为服务器标记是asp.net,而j​​s不知道这是什么。

如果使用ASP.NET 4,则可以在控件的属性中设置客户端ID以使其可预测。

如果您不使用ASP.NET 4,则可以将此客户端ID放在隐藏字段或内联js变量中。


1
投票
var MyCallback = function () { };

然后在asp / cx中执行以下操作:

MyCallback = function () {return "<%= someObject.ClientID %>";}

-5
投票
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;
© www.soinside.com 2019 - 2024. All rights reserved.