【发布时间】:2015-11-22 00:37:43
【问题描述】:
我在 C# 中创建了一个自定义的 BoundField 类。我已将 ASP.NET 验证器添加到 TextBox,并在编辑和插入模式下公开了 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”和“RequiredFieldValidator-Display”属性下看到曲线。第一个警告是:
验证 (ASP.Net):属性“RequiredFieldValidator-Text”不是 元素“BoundFieldWithTextChangedEvent”的有效属性。
其他警告针对“RequiredFieldValidator-”属性的其余部分。
我需要执行哪些自定义控制代码才能使这些属性在 Visual Studio 2013 中正常运行?
编辑:感谢下面 Alex Lebedev 的帮助,我的问题已经解决了。
我需要做两件事:
- 在我的自定义控件中的公共验证器属性上方添加
[PersistenceMode(PersistenceMode.InnerProperty)]。 - 将验证器引用为我在 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>
【问题讨论】:
-
手头没有VS可以尝试,但我怀疑
RequiredFieldValidator$Text之类的东西可能会起作用 -
安德烈,谢谢你的建议;但如果我将
RequiredFieldValidator-Text更改为RequiredFieldValidator$Text,我会收到“意外令牌”错误。
标签: c# asp.net visual-studio-2013