ValidatorCalloutExtender

ValidatorCalloutExtender

我有一个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>

我想最好是自定义工具包的源代码,但是我不打算这样做:)所以希望这个脚本可以解决您的问题

10-08 00:03