我有一个aspx页面,看起来像这样,并调用解决方案中的123.js文件。
<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="1.aspx.cs" Inherits="1" ValidateRequest="false"%>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<script src="Scripts/123.js" type="text/javascript"></script>
.
.
.
.
<tr>
<td>Start DateTime</td>
<td>
<asp:TextBox ID="txtStartDateTime" runat="server"></asp:TextBox>
</td>
<td>
<a href="javascript:_fnSet('this', 'txtStartDateTime', 'close=true,instance=single')">
<img src="Styles/imagesCA3B3R54.jpg" alt="IMG" style="border-style: none" />
</a>
</td>
</tr>
</asp:Content>
此函数fnSet()位于123.js
中123.js以
开头function _fnSet(e, sInputID, sCustom) {
var oInput = document.getElementById(sInputID);
}
sInputID将值'txtStartDateTime'作为字符串,但此oInput返回null。
为什么会这样...... ???
答案 0 :(得分:3)
您在ContentPlaceHolder中。默认情况下,ASP.NET在呈现给客户端时会在Control的ID前面放置一个额外的标识符。这称为ClientID。您可以通过更改ClientIDMode来更改ClientID的生成方式。尝试将ClientIDMode更改为静态。
<asp:TextBox ID="txtStartDateTime" ClientIDMode="Static" runat="server" />
如果您对客户端使用的ID有疑问,请在浏览器中查看该页面并查看生成的页面的HTML。
在您的web.config文件中,您可以将ClientIdMode默认设置为静态。
<pages clientIDMode="static" />
答案 1 :(得分:0)
txtStartDateTime的ID实际上是不同的。看看源代码。
您可以像下面这样获取ClientID:
document.getElementById('<%# txtStartDateTime.ClientID %>')