ASP.NET Web窗体页中的类属性(?)

本文关键字:属性 NET Web 窗体 ASP | 更新日期: 2023-09-27 18:10:02

我在C#中创建了一个自定义BoundField类。我已经向TextBox添加了ASP.NET验证器,并在编辑和插入模式中公开了TextBox OnTextChanged事件。不过,我对验证器感到很烦恼。

我已经公开了验证器,比如这个例子:

private RequiredFieldValidator _requiredFieldValidator;
public RequiredFieldValidator RequiredFieldValidator
{
    get { return _requiredFieldValidator ?? (_requiredFieldValidator = new RequiredFieldValidator()); }
}

我使用这种方法来避免在控件本身中设置无数自定义公共属性。我现在可以这么做了。。。

<cc1:BoundFieldWithTextChangedEvent DataField="size2" HeaderText="Width" SortExpression="size2" ItemStyle-CssClass="numeric" OnTextChanged="size2_OnTextChanged" AutoPostBack="True"
            RequiredFieldValidator-Text="!"
            RequiredFieldValidator-Display="Dynamic" />

此代码编译良好,验证在页面上正常工作;但我在Visual Studio 2013中看到了"RequiredFieldValidator Text"answers"RequiredFieldValidator Display"属性下的歪歪扭扭。第一个警告是:

验证(ASP.Net(:特性"RequiredFieldValidator Text"不是元素"BoundFieldWithTextChangedEvent"的有效特性。

其他警告针对"RequiredFieldValidator-"属性的其余部分。

我需要做什么自定义控件代码才能使这些属性在Visual Studio 2013中正常运行?

编辑:多亏了下面Alex Lebedev的帮助,我的问题得到了解决。

我需要做两件事:

  1. [PersistenceMode(PersistenceMode.InnerProperty)]添加到我的自定义控件中的公共验证器属性之上
  2. 在web表单页面上将验证器引用为我的自定义控件的内部元素

<cc1:BoundFieldWithTextChangedEvent DataField="size2" HeaderText="Width" SortExpression="size2" ItemStyle-CssClass="numeric" OnTextChanged="size2_OnTextChanged" AutoPostBack="True" ItemStyle-Wrap="false" ValidationGroup="UpdateItem">
    <RequiredFieldValidator Text="!" ErrorMessage="You must specify a width." Display="Dynamic" SetFocusOnError="true" EnableClientScript="true"></RequiredFieldValidator>
    <CompareValidator Text="*" ErrorMessage="Width must be greater than zero." Operator="GreaterThan" ValueToCompare="0" Type="Double" Display="Dynamic" SetFocusOnError="true" EnableClientScript="true"></CompareValidator>
</cc1:BoundFieldWithTextChangedEvent>

ASP.NET Web窗体页中的类属性(?)

<cc1:BoundFieldWithTextChangedEvent DataField="size2" HeaderText="Width" SortExpression="size2" ItemStyle-CssClass="numeric" OnTextChanged="size2_OnTextChanged" AutoPostBack="True"
            RequiredFieldValidator-Text="!"
            RequiredFieldValidator-Display="Dynamic" />

替换为:

<cc1:BoundFieldWithTextChangedEvent DataField="size2" HeaderText="Width" SortExpression="size2" ItemStyle-CssClass="numeric" OnTextChanged="size2_OnTextChanged" AutoPostBack="True">
        <RequiredFieldValidator Text="!" Display="Dynamic"/>
</cc1:BoundFieldWithTextChangedEvent>