C#背后的代码中的必填字段验证器

shu*_*qui 3 c# asp.net requiredfieldvalidator

我正在尝试在文件后面的代码中使用必填字段验证器,但它显示以下错误。

错误:

Unable to find control id 'TextBox1' referenced by the 'ControlToValidate' property of 'abcd854'
Run Code Online (Sandbox Code Playgroud)

注意:TextBox1存在于页面中。我已经测试过了。

在此处输入图片说明

Aspx页面

  <%@ 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>
Run Code Online (Sandbox Code Playgroud)

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);
        }
    }
Run Code Online (Sandbox Code Playgroud)

shu*_*qui 5

终于我找到了解决方案。问题是

 this.Controls.Add(validator);
Run Code Online (Sandbox Code Playgroud)

我们都可以看到textbox子页面中的is表示“ Content Page”,因此当使用上述代码行时,它将控件添加到母版页中,其中没有ID为“ TextBox1”的控件。

因此,使用以下命令更改上述代码行后:

this.Form.FindControl("MainContent").Controls.Add(validator);
Run Code Online (Sandbox Code Playgroud)

其完美的工作。

谢谢