【问题标题】:Required Field Validator in code behind C#C# 后面代码中的必需字段验证器
【发布时间】:2015-02-24 05:51:21
【问题描述】:

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

错误:

找不到“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>

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);
        }
    }

【问题讨论】:

  • 尝试将文本框 id 模式设置为静态
  • 没用。运气不好
  • 找到控件时删除ID部分 ((TextBox)this.Form.FindControl("MainContent").FindControl("TextBox1"));

标签: c# asp.net requiredfieldvalidator


【解决方案1】:

问题是:

 this.Controls.Add(validator);

大家可以看到,TextBox1在子页面,意思是“Content Page”,所以在使用上面这行代码的时候,它在母版页中添加了控件,其中没有控件id "TextBox1"。

将上面的代码行替换为:

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

效果很好。

【讨论】:

    【解决方案2】:

    试试这个...

    后面的代码

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

    【讨论】:

    • 这可行,但如何添加错误消息和任何其他属性,如添加 css 等?
    【解决方案3】:

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

    Add ClientIDMode="Static" 在您的文本框中

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-30
        • 2012-12-03
        • 2010-11-26
        • 2013-03-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多