Javascript更新ASP:标签未更新文本

Javascript Updating ASP:Label Not Updating Text

本文关键字:更新 文本 标签 ASP Javascript      更新时间:2023-09-26

我有一个用户注册页面,我想在没有回发的情况下检查输入的用户名是否已经在用户中。

ASPX页面:

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title></title>
    <script src="Scripts/Registration.js" type="text/javascript"></script>
</head>
<body>
    <form id="form1" runat="server">
         <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true"></asp:ScriptManager>
   <table class="contenttable">
        <tr>
            <td class="RegTableLabelCol">
                <asp:Label ID="Label1" runat="server" Text="User Name"></asp:Label>
            </td>
            <td class="RegTableDataCol">
                <asp:TextBox ID="txtUserName" runat="server" ></asp:TextBox>
            </td>
            <td class="RegTableMessageCol">
                <asp:Label ID="lblUserName" runat="server" CssClass="ErrorLabel" Text="Test "></asp:Label>
            </td>
        </tr>
    </table>
 </form>
  </body>
</html>

JavaScript:

function UserChecker(username) {
lbl = document.getElementById('<%=lblUserName.ClientID%>');
if (username != '') {
    PageMethods.UserNameChecker(username, OnUserSucceeded);
}
else {
    lbl.innerHTML = 'Please enter a username';
}
}
function OnUserSucceeded(result, userContext, methodName) {
lbl = document.getElementById('<%=lblUserName.ClientID%>');
if (methodName == "UserNameChecker") {
    if (result == true) {
        lbl.innerHTML = 'User name not available';
    }
    else {
        lbl.innerHTML = 'User name is available ';
    }

}

代码背后:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            txtUserName.Attributes.Add("onblur", "UserChecker(this.value)");
        }
    }
    [WebMethod]
    public static bool UserNameChecker(string UserName)
    {
        string UserNameDb = null;
        SQLMethods sqlm = new SQLMethods();
        DataSet dataSet1 = sqlm.IsUserNameExist(UserName);
        foreach (DataRow row in dataSet1.Tables["UserName"].Rows)
        {
            UserNameDb = string.Format("{0}", row["UserName"]);
        }
        if (UserNameDb != null)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

我在javascript中放入了警报,函数似乎被触发了。问题是没有为任何一种情况设置标签(没有用户名、使用用户名或用户名正常)。我哪里错了?

更新

JavaScript在一个.js文件中,如果我把它放在aspx页面中,它就会获得标签并工作。

lbl = document.getElementById('<%=lblUserName.ClientID%>');

在JS文件中将不起作用。<%=%>表示aspx页面的服务器代码部分。如果你把它放在一个JS文件中,它只是一个字符串。

您可以将此部分保留在页面中,并将lbl声明为在JS文件引用中起作用的全局变量。

或者,您可以将控件的ClientIDMode切换为static,然后在JS文件中使用控件的ID