3

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

这里的名称不会出现在弹出框中。

4

3 回答 3

2

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

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%>')" />

更新

我没有注意到构造 like<%=...%>在服务器端控件声明中不起作用的事实(因为它们在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();
}
于 2013-07-18T09:41:34.457 回答
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);
}
于 2013-07-18T09:42:35.677 回答
1

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

更新:

如果要获取客户端 ID,则可以从后面的代码中将其注册到变量中,如下所示:

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

并在 Js 文件中使用:

function loginAlert() {
var name = document.getElementById(txtboxClientId).value;
alert(name);
}
于 2013-07-18T09:42:21.757 回答