做了一个用户控件,由一个TextBox、若干验证控件组成和若干属性构成。在使用页面,通过用户控件的属性确定哪个验证控件有效。测试证明该控件在普遍的WebForm中可以预期发挥正常作用。但今天发现嵌套DetailsView模板中,也可以提示验证失败(比如设置用户控件的属性之一IsRequired为True,当焦点离开没有任何内容的TextBox时提示“输入内容”),问题是,若此时按下DetailsView模板中的Update或Insert按钮时,相应的事件仍会执行,因为数据表的部分字段不接受Null,所以程序会报错。Update或Insert按钮的ValidationGroup与用户控件的ValidationGroup一致。另外,Update或Insert的默认OnCommand已去掉,添加OnClick属性,并单独写了相应的过程。是否问题与此有关?谢谢!

解决方案 »

  1.   

    <asp:TemplateField HeaderText="中文简介" SortExpression="Description">
                <EditItemTemplate>
                    <uc1:ValidInput ID="txtDescription" runat ="server"  Text='<%# Bind("Description") %>' ExpressionOptions ="通用" Width ="500" TextMode="MultiLine" Height ="100" Required ="true" IsEnableViewState ="true" MaxLength ="500" ValidationGroup="AddEditProductCls" />
                </EditItemTemplate>
                <InsertItemTemplate>
                    <uc1:ValidInput ID="txtDescription" runat ="server"  Text='<%# Bind("Description") %>' ExpressionOptions ="通用" Width ="500" TextMode="MultiLine" Height ="100" Required ="true" IsEnableViewState ="true" MaxLength ="500" ValidationGroup="AddEditProductCls" />
                </InsertItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="lblDescription" runat="server" Text='<%# Bind("Description") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="英文简介" SortExpression="EnDescription">
                <EditItemTemplate>
                    <uc1:ValidInput ID="txtEnDescription" runat ="server"  Text='<%# Bind("EnDescription") %>'  ExpressionOptions ="英文加标点" Width ="500" TextMode="MultiLine" Height ="100" Required ="true" IsEnableViewState ="true" MaxLength ="500" ValidationGroup="AddEditProductCls" />
                </EditItemTemplate>
                <InsertItemTemplate>
                    <uc1:ValidInput ID="txtEnDescription" runat ="server"  Text='<%# Bind("EnDescription") %>'  ExpressionOptions ="英文加标点" Width ="500" TextMode="MultiLine" Height ="100" Required ="true" IsEnableViewState ="true" MaxLength ="500" ValidationGroup="AddEditProductCls" />
                </InsertItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="lblEnDescription" runat="server" Text='<%# Bind("EnDescription") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>