Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 中继器中需要的字段验证程序_Asp.net - Fatal编程技术网

Asp.net 中继器中需要的字段验证程序

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

我有一个中继器控件和中继器中的文本框。我希望文本框中有一个必需的字段验证器,我可以这样做吗?

您可以将ControlToValidate设置为repeater itemdatabound上的值。

试试这个

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