我有一个ListView
<asp:ListView ....>
<asp:TextBox ID="txtComment" ... />
<asp:RequiredFieldValidator ID="rfvComment" ControlToValidate="txtComment" ... />
<act:ValidatorCalloutExtender ID="vceComment" TargetControlID="rfvComment" ... />
<asp:Button ID="btnAddComment" ... />
</asp:ListView>
可以说此ListView创建以下内容:
文字框1
按键1
文字框2
按钮2
文字框3
按键3
如果单击Button2,则RequiredFiledValidator / ValidatorCalloutExtender应用于TextBox1而不是TextBox2;如果单击Button3,RequiredFiledValidator / ValidatorCalloutExtender也应用于TextBox1,我希望RequiredFiledValidator / ValidatorCalloutExtender应用于按钮旁边的TextBox,因此如果单击Button3,我希望它应用于TextBox3。
有人知道我该怎么做到吗?
谢谢。
最佳答案
使用ValidationGroup属性并动态生成它的值:
<asp:TextBox runat="server" ID="TextBox1" />
<asp:RequiredFieldValidator runat="server" ControlToValidate="TextBox1" Text="*"
ValidationGroup='<%# "validationGroup_" + Container.DataItemIndex.ToString() %>' />
<asp:Button runat="server" Text="Click Me" ValidationGroup='<%# "validationGroup_" + Container.DataItemIndex.ToString() %>' />
在表格的最下方添加脚本:
<script type="text/javascript">
var originalValidatorUpdateDisplay = ValidatorUpdateDisplay;
ValidatorUpdateDisplay = function (val) {
originalValidatorUpdateDisplay.call(null, val);
var isHidden = val.style.display == "none" || val.style.visibility == "hidden";
var extender = Sys.UI.Behavior.getBehaviorsByType(val, Sys.Extended.UI.ValidatorCalloutBehavior);
if (extender && extender.length == 1) {
extender = extender[0];
if (isHidden) {
extender.hide();
}
else {
extender.show(true);
}
}
}
</script>
我想最好是自定义工具包的源代码,但是我不打算这样做:)所以希望这个脚本可以解决您的问题