gpt4 book ai didi

c# - 使用 RequiredFieldValidator 验证服务器控件中的文本框

转载 作者:太空宇宙 更新时间:2023-11-03 13:47:23 26 4
gpt4 key购买 nike

我有自定义服务器控件,其中包含三个文本框。我需要使用 ASP.NET 字段验证器验证其内容。

我将 RequiredFieldValidator 的“ControlToValidate”属性设置为文本框的 ID 属性,但验证器似乎无法找到此文本框。这是我正在尝试做的简化代码(省略了当前未使用的字段和属性):

[DefaultProperty("Text")]
[ToolboxData("<{0}:ServerControl runat=server></{0}:ServerControl>")]
public class CommentServerControl : WebControl, IPostBackDataHandler
{
private TextBox _textBoxName;
private RequiredFieldValidator _requiredName;

protected override void OnInit(EventArgs e)
{
var idName = "Name-" + UniqueID;
_textBoxName = new TextBox();
_textBoxName.ID = idName;
_textBoxName.ClientIDMode = System.Web.UI.ClientIDMode.Static;
_textBoxName.ValidationGroup = ValidationGroup; // is set up via mark up
Controls.Add(_textBoxName);
_requiredName = new RequiredFieldValidator();
_requiredName.ID = "RequiredName-" + UniqueID;
_requiredName.ValidationGroup = ValidationGroup;
_requiredName.ErrorMessage = RequiredMessage; // is set up via mark up
_requiredName.ControlToValidate = _textBoxName.ID;
Controls.Add(_requiredName);
}

public string ValidationGroup
{
get
{
var s = (string)ViewState["ValidationGroup"];
return (s ?? string.Empty);
}
set
{
ViewState["ValidationGroup"] = value;
}
}

public string RequiredMessage
{
get
{
var s = (string)ViewState["RequiredMessage"];
return (s ?? string.Empty);
}
set
{
ViewState["RequiredMessage"] = value;
}
}
}

运行此代码时,我收到错误“无法找到由‘RequiredName’的‘ControlToValidate’属性引用的控件 ID‘Name-ctl00$MainContent$ctl00’。

我读到这可能是因为控件具有不同的 NamingContainer,但在这种情况下对 NamingContainer 的引用是相同的。但是,FindControl(string id) 方法无法在 OnInit 方法中找到我的文本框控件。我究竟做错了什么?提前致谢。

注意:使用 UniqueID 创建 ID 用于防止多次使用我的控件时发生冲突。

最佳答案

On_Init 为时过早,因为此时尚未创建控件。

关于c# - 使用 RequiredFieldValidator 验证服务器控件中的文本框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14836311/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com