外部javascript中的剃刀代码被视为字符串

时间:2019-05-01 12:25:29

标签: javascript asp.net webforms

我想在服务器上运行某个元素之后在特定元素之后添加一个表元素,但是当我尝试访问该元素的ID时,它被视为字符串

我尝试在警报中显示ID或元素,但它是字符串 我试图检查堆栈溢出的其他帖子,但他们都说访问方式与我产生字符串的方式相同 我尝试将与字符串相同的代码放在aspx文件中,并且它可以正常工作,所以我知道<%= message.ClientID%>

没问题

在aspx文件中

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    <div class="Manager">
        <p id="message" runat="server" class="caption">
            There aren't any users in the database
        </p>
        <form runat="server">
            <asp:HiddenField id="hfData" runat="server"/>
        </form>
        <script src="js/Manager.js" ></script>
    </div>
</asp:Content>

在Manager.js中

var message = document.getElementById('<%=message.ClientID %>');
message.parentNode.insertBefore(tbl, message.nextSibling);

当我看到它的值时,消息等于未定义 并且以下代码无法执行

我尝试了以下尝试访问ID

var str = '<%=message.ClientID%>';
alert(str);

,但它以字符串形式警报<%= message.ClientID%> 它应该产生ContentPlaceHolder1_message

的输出

2 个答案:

答案 0 :(得分:3)

首先,尝试将Manager.js脚本直接添加到对我有用的aspx页面。恐怕此时在服务器上执行.aspx页时,由于呈现该页,因此不包含Manager.js。

<p id="message" runat="server" class="caption">
     There aren't any users in the database
</p>
<script type="text/javascript">
     var str = '<%=message.ClientID%>';
     alert(str);
</script>

答案 1 :(得分:1)

我设法通过在服务器端用剃刀代码创建一个javascript变量,然后在外部javascript文件中使用它来解决了该问题

aspx

<script type="text/javascript">
    var messageId = '<%=message.ClientID%>';
</script>

在Manager.js中

var message = document.getElementById(messageId);
message.parentNode.insertBefore(tbl, message.nextSibling);