Asp.net 中继器中需要的字段验证程序
我有一个中继器控件和中继器中的文本框。我希望文本框中有一个必需的字段验证器,我可以这样做吗?您可以将ControlToValidate设置为repeater itemdatabound上的值。试试这个Asp.net 中继器中需要的字段验证程序,asp.net,Asp.net,我有一个中继器控件和中继器中的文本框。我希望文本框中有一个必需的字段验证器,我可以这样做吗?您可以将ControlToValidate设置为repeater itemdatabound上的值。试试这个 <asp:Repeater id="myRep" OnItemDataBound="rep_ItemDataBound" runat="server"> <ItemTemplate> <asp:TextBox id="tx" runat="se
<asp:Repeater id="myRep" OnItemDataBound="rep_ItemDataBound" runat="server">
<ItemTemplate>
<asp:TextBox id="tx" runat="server" />
<asp:RequiredFieldValidator id="myVal" ControlToValidate="tx" ErrorMessage="Required" runat="server" />
</ItemTemplate>
</asp:Repeater>
<asp:Repeater ID="rptSample" runat="server">
<ItemTemplate>
Name:<br />
<asp:TextBox ID="txtName" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="rfvName" ControlToValidate="txtName" runat="server" Display="Static" ErrorMessage="Name field cannot be left blank"></asp:RequiredFieldValidator>
</ItemTemplate>
</asp:Repeater>
<br />
<asp:Button ID="btnSubmit" Text="Submit" runat="server" />
名称:
如果您希望通过单击一个按钮来验证中继器中的所有文本框,那么这很简单
<asp:Repeater ID="rpt" runat="server">
<ItemTemplate>
<asp:TextBox ID="txt" runat="server">
</asp:TextBox>
<asp:RequiredFieldValidator ID="rqf" ControlToValidate="txt"
ErrorMessage="*" ValidationGroup = "TestValidationGroup" runat = "server">
</asp:RequiredFieldValidator>
</ItemTemplate>
</asp:Repeater>
<asp:Button ID = "btnSubmit" runat = "server" ValidationGroup = "TestValidationGroup" />
无需检查数据绑定或任何事件。也许您希望每行进行验证。。。将验证组设置为每行一个组,如下所示
protected void Repeater_OnItemDataBound(object sender, RepeaterItemEventArgs e) {
tblData tbldata = e.Item.DataItem as tblData;
RequiredFieldValidator val = (RequiredFieldValidator)e.Item.FindControl("rfv");
if (tbldata.FieldName.ToUpper().Contains("NOT NULL")) {
TextBox tb = (TextBox)e.Item.FindControl("txtDATFieldName");
val.ControlToValidate = tb.ID;
}
else {
val.Enabled = false; // disable when you dont need a validator
}
}
ValidationGroup='<%# "gropname" + Eval("Id") %>'
ValidationGroup=''
在验证器、文本框和按钮中执行此操作
嗯
G.我一直在尝试执行此操作时,RegisterExpandoAttribute中出现重复密钥异常。 当“OnDataBinding”而不是“ItemDataBinding”时,我在中继器中使用UserControl 这对我很有用:
/// <summary>
/// Raises the <see cref="E:System.Web.UI.Control.DataBinding" /> event.
/// </summary>
/// <param name="e">An <see cref="T:System.EventArgs" /> object that contains the event data.</param>
protected override void OnDataBinding(EventArgs e)
{
base.OnDataBinding(e);
foreach (Control ct in this.Controls)
{
BaseValidator bv = ct as BaseValidator;
if (null == bv)
{
continue;
}
bv.ControlToValidate = this.FindControl(bv.ControlToValidate).ID;
bv.ValidationGroup = this.ValidationGroup;
}
}
//
///引发事件。
///
///包含事件数据的对象。
受保护的覆盖无效OnDataBinding(EventArgs e)
{
碱基结合(e);
foreach(本控制中的控制ct)
{
BaseValidator bv=ct作为BaseValidator;
if(null==bv)
{
继续;
}
bv.ControlToValidate=this.FindControl(bv.ControlToValidate).ID;
bv.ValidationGroup=this.ValidationGroup;
}
}
是的,我认为这也没有任何意义你能详细说明一下吗?到底是什么不起作用?它对我来说很好(刚刚测试过)。当您尝试提交并清空字段时,您没有收到错误消息吗?不要问我为什么,但这只适用于我使用
tb.ID
而不是tb.ClientID
@ngm。我认为您是对的,因为我假设验证器将尝试在当前INamingContainer(在本例中为Repeater)中查找控件。我已更新帖子。错误:找不到“myVal”的“ControlToValidate”属性引用的控件id“tx”。。我能做些什么来解决这个问题呢?我自己已经测试过了,从我所知道的来看,唯一正在运行的验证是RequiredFieldValidator
注册的客户端验证脚本。我不相信服务器端验证实际上正在运行。我知道这是一篇老文章,但你能证实这是真的吗?你能解释一下你是如何在你这方面实施这个解决方案的吗?在我这方面效果很好(经过测试)。如果您单击“提交”按钮,它会在文本框控件旁边显示错误消息。您是否可以编写有问题的代码。onitemdatabound get textbox.clientid,然后将此设置为您的验证程序控件属性。。。
ValidationGroup='<%# "gropname" + Eval("Id") %>'
/// <summary>
/// Raises the <see cref="E:System.Web.UI.Control.DataBinding" /> event.
/// </summary>
/// <param name="e">An <see cref="T:System.EventArgs" /> object that contains the event data.</param>
protected override void OnDataBinding(EventArgs e)
{
base.OnDataBinding(e);
foreach (Control ct in this.Controls)
{
BaseValidator bv = ct as BaseValidator;
if (null == bv)
{
continue;
}
bv.ControlToValidate = this.FindControl(bv.ControlToValidate).ID;
bv.ValidationGroup = this.ValidationGroup;
}
}