可以't获取外部javascript文件上asp:textbox的值

Can't get value of asp:textbox on external javascript file

本文关键字:文件 asp 的值 textbox javascript 外部 获取 可以      更新时间:2023-09-26

以下是示例:abcd.aspx

<asp:TextBox ID="txtFName" runat="server" ></asp:TextBox>
<asp:Button ID="btnLogin" runat="server" Text="Login" 
onclick="btnLogin_Click" OnClientClick = "loginAlert()" />

javascriptfile.js

function loginAlert() {
var name = document.getElementById('<% txtFName.ClientID %>').value;
alert(name);

}

到.aspx页面上javascript文件的链接

<script src="../../JSfiles/javascriptfile.js" type="text/javascript"></script>

此处的名称不会出现在弹出框中。

您不能在普通文件(如javascriptfile.js)中使用代码块(<%%>),因为ASP.NET不会以任何方式解释它们。您可以做的是将文本框的Id传递给一个函数:

function loginAlert(ctrl) {
  var name = document.getElementById(ctrl).value;
  alert(name);
}

然后标记将如下所示:

<asp:Button ID="btnLogin" runat="server" Text="Login" 
  OnClick="btnLogin_Click" OnClientClick="loginAlert('<%=txtFName.ClientID%>')" />

更新

我没有注意到像<%=...%>这样的构造在服务器端控件声明中不起作用(因为在编译页面时,它们基本上会转换为Response.Write语句)。至少有两种方法可以解决这个问题:

您可以使名称文本框对DOM元素的引用全局可用。您的标记将如下所示:

<script type="text/javascript">
  var loginNameId = '<%=txtFName.ClientID%>';    
</script> 
<asp:Button ID="btnLogin" runat="server" Text="Login" 
  OnClick="btnLogin_Click" OnClientClick="loginAlert()" />

您的loginAlert将如下所示:

function loginAlert() {
  var name = document.getElementById(loginNameId).value;
  alert(name);
}

我个人不喜欢这个解决方案,因为你用变量污染了全局名称空间,而且它通常不是很优雅。

或者,您可以将数据属性与ASP.NET数据绑定一起使用。

标记:

<asp:Button ID="btnLogin" data-name='<%# txtFName.ClientID %>' runat="server" Text="Login" 
  OnClick="btnLogin_Click" OnClientClick="loginAlert(this)" />

JavaScript:

function loginAlert(ctrl) {
  var name = document.getElementById(ctrl.readAttribute('data-name')).value;
  alert(name);
}

代码背后:

protected void Page_Load(object sender, EventArgs e)
{
  if (!Page.IsPostBack)
    DataBind();
}

ASP.Net解析器不提供javascript文件。因此,<% %>被忽略并按原样输出。

最简单的方法是提供ID作为参数:

<asp:TextBox ID="txtFName" runat="server" ></asp:TextBox>
<asp:Button ID="btnLogin" runat="server" Text="Login" 
onclick="btnLogin_Click"  />

代码背后:

btnLogin.OnClientClick = string.Format("loginAlert('{0}')", txtFName.ClientID);

在js文件中:

function loginAlert(txtId) {
var name = document.getElementById(txtId).value;
alert(name);
}

Markup <% %>在JS文件中不起作用。如果你把它放在<script type='text/javascript'>...</script>中的aspx页面上,它就会工作。

更新:

如果你想获得客户端id,那么你可以从代码后面的变量中注册它,如下所示:

ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "JsVariables", "var txtboxClientId='" + txtFName.ClientID + "';", true);

在Js文件中使用:

function loginAlert() {
var name = document.getElementById(txtboxClientId).value;
alert(name);
}