C#后面的代码中必需的字段验证器

时间:2014-12-27 07:17:52

标签: c# asp.net requiredfieldvalidator

我正在尝试在代码隐藏文件中使用必需的字段验证程序,但它显示以下错误。

错误:

Unable to find control id 'TextBox1' referenced by the 'ControlToValidate' property of 'abcd854'

注意:页面中存在TextBox1。我测试了它。

enter image description here

Aspx Page

  <%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
    CodeBehind="Default.aspx.cs" Inherits="WebApplication3._Default" %>

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">

    <p>
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <asp:Button ID="Button1" runat="server" Text="Button" ValidationGroup="save" />       
    </p>
    <p>
        &nbsp;<asp:ValidationSummary ID="ValidationSummary1" runat="server" />
</asp:Content>

Cs档案

   public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //RequiredFieldValidator validator = ControlsValidation.AssignRequiredFieldValidatorToControl(TextBox1, "Field is required", "*", "save");
            //validator.ControlToValidate = ((TextBox)this.Form.FindControl("MainContent").FindControl("TextBox1")).ID;


            RequiredFieldValidator validator = new RequiredFieldValidator();
            validator.ID = "abcd" + new Random().Next(100, 1000);
            validator.ControlToValidate = ((TextBox)this.Form.FindControl("MainContent").FindControl("TextBox1")).ID;
            validator.EnableClientScript = true;
            validator.ErrorMessage = "";
            validator.Text = "*";
            validator.ValidationGroup = "save";
            validator.Display = ValidatorDisplay.Dynamic;

            this.Controls.Add(validator);
        }
    }

4 个答案:

答案 0 :(得分:4)

最后我得到了解决方案。问题是

 this.Controls.Add(validator);

正如我们所有人都可以看到textbox在子页面中的意思是“Content Page”所以当使用上面的代码行时,它会在母版页中添加控件,其中无法控制id“TextBox1”。

所以在用以下代码更改上面的代码行之后

this.Form.FindControl("MainContent").Controls.Add(validator);

它完美运作。

由于

答案 1 :(得分:2)

在asp.net中,渲染页面后,TextBox的ID将被更改(请参阅浏览器中的源代码)。您可以将其客户端ID模式更改为静态,以便它不会发生变化。

文本框中的

Add ClientIDMode="Static"

<asp:TextBox ID="TextBox1" runat="server" ClientIDMode="Static"></asp:TextBox> 

答案 2 :(得分:1)

试试这个...

背后的代码

oTexbox1.Attributes["required"] = "true";

答案 3 :(得分:-2)

尝试使用ClientID而不是ID

RequiredFieldValidator validator = new RequiredFieldValidator();
validator.ID = "abcd" + new Random().Next(100, 1000);

validator.ControlToValidate = ((TextBox)this.Form
             .FindControl("MainContent").FindControl("TextBox1")).ClientID;

validator.EnableClientScript = true;
validator.ErrorMessage = "";
validator.Text = "*";
validator.ValidationGroup = "save";
validator.Display = ValidatorDisplay.Dynamic;

this.Controls.Add(validator);