我正在使用RegularExpressionValidator来验证文本框。
现在,如果文本框有效,我需要在Label Control上显示“Page is Valid”消息。
我是在Code Behind中执行此操作还是在javascript中声明标签?
在javascript中我尝试使用:
document.getElementById("LabelId").innerText="Your Text Here"
但它显示 Microsoft JScript运行时错误:
无法设置属性'innerText'的值:object为null或 未定义”。
我也试过使用innerHTML,但它显示了类似的错误。那么为标签赋值的正确方法是什么? 编辑:下面是我的aspx编码:
<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true"
CodeBehind="RegularExpressionValidator.aspx.cs" Inherits="ValidationTask.WebForm3" %>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<asp:Label ID="LabelText" runat="server" Text="Label"></asp:Label><br />
<script type="text/javascript" language="javascript">
function ValidatePage() {
debugger;
if (Page_IsValid) {
document.getElementById('<%= LabelText.ClientID %>').innerHTML = 'Page Is Valid';
}
else {
document.getElementById('<%= LabelText.ClientID %>').innerHTML = 'Page is Invalid';
}
}
</script>
<asp:Label ID="LabelZip" runat="server" Text="Enter Zip Code"></asp:Label>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br />
<asp:Button ID="Button1" runat="server" Text="Enter" OnClientClick="return ValidatePage()" />
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" ControlToValidate="TextBox1"
ValidationExpression="\d{5}" runat="server" ErrorMessage="The zip code must be 5 numeric
digits"></asp:RegularExpressionValidator>
</asp:Content>
先谢谢。
P.S。我是新来的,这是我的第一个问题。如果我犯了任何错误,请忽略。
答案 0 :(得分:3)
document.getElementById("LabelId").innerText="Your Text Here"
听起来您的元素在页面上找不到。仔细检查ID以确保它存在。最简单的方法是只查看html以确保使用正确的Id。将asp.Net标签定义为服务器端控件时要记住的一件事是客户端Id是指定id和标签祖先的id的串联。这意味着您无法直接在JavaScript中引用服务器端ID,因为它只是完整客户端ID的一部分。您可能必须使用通配符指定它。
如果您需要使用外卡,可能更容易在Jquery
中执行$('[id*=LabelId]')
这意味着您必须向JQuery添加脚本引用。
答案 1 :(得分:2)
生成客户端ID
在浏览器中查看您的网页来源。这将为您提供有关如何生成客户端ID的良好指示。每个元素ID都应该是唯一的,并且使用母版页和控件,您和.NET框架很难产生这样的结果。如果您使用包含内容占位符的母版页,您会注意到您的元素ID是根据它们所在的内容占位符的名称生成的。
关于客户端ID的生成,这是一个很好的Code Project article。
<强>验证强>
在您的情况下,使用RegularExpressionValidator
会在按下按钮时激活页面验证程序,如果有效,则会将页面发布回服务器。最好在Code Behind中添加代码。在这种情况下,像@Sachin
ScriptManager.RegisterStartupScript
这样的东西应该在按钮的事件处理程序中工作。
假设您只有一个字段:您可以将验证器转换为CustomFieldValidator
并通过javascript触发正则表达式。如果值正确,您可以在javascript中设置标签文本,而不必进行任何回发,但是一旦页面回发,您可能会丢失标签的状态。
编辑: 的的jQuery 强>
我经常使用jQuery selectors引用我的元素,因为我不想为生成的客户端ID烦恼。您可以使用Ends With Selector
获取元素,如下所示:
var name = $('input[id$="txtName"]'); // Find an element that ends with "txtName".
请记住,当您在生成的页面上的多个位置以相同名称结尾的元素时,可能会出现冲突。
答案 2 :(得分:1)
在ASP.Net Web表单中,为服务器上的每个控件都有一个名为ClientID的属性。这是您可以在客户端使用的生成的ID。因此,要在客户端为标签设置&lt; asp:label runat =“server”id =“label1”/&gt;,您可以做的一种方法是使用服务器端将clientId放入客户端变量中RegisterStartupScript -
//server side code
page_load(){
ScriptManager.RegisterStartupScript("IDs", string.format("var labelId = '{0}';", label1.ClientID);
}
//in javascript
document.getElementById(labelId).innerHTML = 'whatever';
顺便说一句,我只是对这段代码进行了调整,因此可能无法按原样运行。