C# 代码隐藏C中必需的字段验证器#

C# 代码隐藏C中必需的字段验证器#,c#,asp.net,requiredfieldvalidator,C#,Asp.net,Requiredfieldvalidator,我试图在代码隐藏文件中使用必需的字段验证器,但它显示了以下错误 错误: 找不到“abcd854”的“ControlToValidate”属性引用的控件id“TextBox1” 注意:页面中存在TextBox1;我已经测试过了 Aspx页 <%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="t

我试图在代码隐藏文件中使用必需的字段验证器,但它显示了以下错误

错误:

找不到“abcd854”的“ControlToValidate”属性引用的控件id“TextBox1”

注意:页面中存在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>

尝试使用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);

在ASP.NET中,呈现页面后,文本框的id将更改(请参见浏览器中的源代码)。您可以将其客户端id模式更改为静态,这样它就不会更改

在文本框中添加clientmode=“Static”

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

问题是:

 this.Controls.Add(validator);
正如我们所看到的,
TextBox1
位于子页面中,意思是“
内容页面
”,因此当使用上述代码行时,它会在母版页中添加控件,其中没有id为“
TextBox1
”的控件

将上述代码行替换为以下内容后:

this.Form.FindControl("MainContent").Controls.Add(validator);
它工作得很好。

试试这个

代码隐藏

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

尝试将textbox id模式设置为Static无效。当您找到控件((文本框)this.Form.FindControl(“MainContent”).FindControl(“TextBox1”))时,硬移动ID部分;这是可行的,但如何添加错误消息和任何其他属性,如添加css等?
oTexbox1.Attributes["required"] = "true";