外部JavaScript中的Razor代码被视为字符串。

3

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

我已经尝试在警报中显示元素的ID或元素,但它是字符串。 我已经尝试查找stackoverflow上的其他帖子,但它们都说要访问的方式与我产生字符串的方式相同。 我已经尝试将与字符串中的代码相同的代码放在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个回答

4

首先,尝试直接将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
我现在明白你的意思了,谢谢。有没有办法让脚本在服务器端第一次渲染并将ID保存在变量中? - harelon
我很高兴能够帮助到您。 - Learning

1
我通过在服务器端使用 Razor 代码创建一个 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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接