如何在javascript中为文本分配文本?

时间:2014-01-21 05:01:22

标签: javascript asp.net

我正在使用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。我是新来的,这是我的第一个问题。如果我犯了任何错误,请忽略。

3 个答案:

答案 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';

顺便说一句,我只是对这段代码进行了调整,因此可能无法按原样运行。