【问题标题】:.NET validate dynamically created fields.NET 验证动态创建的字段
【发布时间】:2013-05-16 06:39:18
【问题描述】:

我正在处理一个必须动态添加多个字段的页面。我基本上已经完成了这项工作,但我被验证所阻碍。
问题是表单字段需要特定的正则表达式验证,当只有一个输入时效果很好。现在,当 javascript 动态创建字段时,它只验证第一个字段。

我已经四处搜索,但没有找到任何东西,现在我唯一的想法是将正则表达式值从设置文件传递到 javascript 并在用户端验证它,但我将无法使用 Page.IsValid()那么。

所以我的问题是 - 是否可以将服务器端验证添加到由 javascript 动态创建的字段,以及如何?

谢谢!

【问题讨论】:

  • 由 javascript 创建的字段类型为 input type="text" ,如果您想要服务器端验证,则必须提供带有标签的 runat="server"
  • 能否分享您用于创建字段的代码

标签: c# javascript asp.net dynamic validation


【解决方案1】:

简短的回答是——这可能是可能的,但非常困难,而且解决方案非常脆弱,需要大量维护。

理论上,如果您可以在使用正则表达式验证器时找出 ASP.NET 生成的 JS 代码,然后对其进行逆向工程,您就可以做到这一点。这里的主要问题是新字段是在客户端而不是在服务器端创建的。

如果您可以更新您的页面以便在服务器端动态创建新的文本框,那么您所要做的就是在 OnInit 方法中创建新的文本框和新的验证器,这样就可以了。

这是它的样子。

protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);

        //set the appropriate conditions for your solution
        if (true)
        {
            //create text box
            TextBox txtNewField = new TextBox();
            txtNewField.ID = "txtNewField";

            //create and initialize validator
            RegularExpressionValidator regexR1 = new RegularExpressionValidator();

            regexR1.ValidationExpression = "set the regex here";
            regexR1.ControlToValidate = txtNewField.ID;
            regexR1.ErrorMessage = "you are doing something wrong";

            //add both of these to page wehre needed. 
            //I assume there is a panel control where you are adding these 
            //but you can customize it more
            pnlFields.Controls.Add(txtNewField);
            pnlFields.Controls.Add(regexR1);
        }
    }

【讨论】:

  • 谢谢!我只是在研究如何做到这一点,因为我的研究导致了这一点。我会试试这个。
【解决方案2】:

如果您想要服务器端验证和客户端验证,那么您需要将 Input type="text" 创建为 runat ="server"

示例:-

<input type="text" class="alphanum" id="txtName" name="txtName" runat="server" />

使用 Jquery 使用正则表达式进行验证

$("input.alphanum").bind("keyup", function(e) {
    this.value = this.value.replace(/[^a-zA-Z0-9]/g, '');
});

【讨论】:

  • 感谢您的回答,但是如何将<asp:regularexpressionvalidator></asp:regularexpressionvalidator> 字段添加到 .ascx.cs 文件中?此设置还强制我在我的 .ascx 文件中设置正则表达式模式,但它通过它的 ID 调用该字段,该 ID 为每个新字段更改(因为 ID 需要是唯一的和 AFAIK 。 NET 不会验证具有相同 ID 的字段)。 ID 是这样创建的 field1, field2, field3, ... , fieldn
  • 尝试相同,您可以在客户端正则表达式中尝试相同,问题是:regularexpressionvalidator 只是 asp:Textboxes,
  • 嗯,这只是客户端,验证发生在用户浏览器中,而我想实现在服务器端完成的验证。
  • Regex 您可以在客户端验证,这是您需要在服务器端验证的其他事件,请告诉我您需要在服务器端实现的操作,以便我们为您提供解决方法跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-21
相关资源
最近更新 更多