无法在外部javascript文件上获得asp:textbox的值

时间:2013-07-18 09:36:19

标签: javascript asp.net textbox

这是示例: 的 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>

此处名称未显示在弹出框中。

3 个答案:

答案 0 :(得分:2)

您不能在普通文件(例如<%)中使用代码块(%>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();
}

答案 1 :(得分:1)

标记<% %>不适用于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);
}

答案 2 :(得分:1)

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);
}