【问题标题】:DropdownList validation with AutoPostBack set to true inside updatepanel在更新面板中将 AutoPostBack 设置为 true 的 DropdownList 验证
【发布时间】:2012-01-18 11:27:51
【问题描述】:

有很多帖子涉及更新面板内的验证控件和部分页面呈现。但是我在这里遇到了一个不同的问题,我确实尝试更新到 sp1 .NET Framework 2.0 并再次更新到 .NET Framework 4.0 但没有任何反应。

基本上,我在更新面板中有一个下拉列表,其自动回发设置为 true,并且将一个空项目 -- Select -- 添加为 index 0 用于验证 (Required Field Validator) 目的。我确实发生了,即使我选择索引 0 ,验证消息也会短暂出现,然后发生部分回发。有没有人有任何理由采用相同或替代的方式来做到这一点。

注意:

在选定的索引更改事件期间,我正在填充其他控件(下拉列表)。我可以使用来自AjaxControlToolkit 的级联下拉列表,但是我失去了其他控件需要的事件验证功能。

【问题讨论】:

    标签: c# asp.net drop-down-menu .net-2.0 updatepanel


    【解决方案1】:

    为什么不在代码后面验证客户选择?

    前任:

    if (ddlName.selectedValue == "-1")
    {
        lblErr.text = "You have to select...";
        lblErr.visible = true;
    }
    

    【讨论】:

    • @barek 这将是我最后的手段(我现在正在使用的),直到我得到另一个选择
    【解决方案2】:

    作为一个快速测试,我想出了这个(对我来说):

    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <asp:RequiredFieldValidator ID="rfv" runat="server" ControlToValidate="ddl1" InitialValue="0" ValidationGroup="DDLOnly">*</asp:RequiredFieldValidator>
            <asp:DropDownList ID="ddl1" runat="server" AutoPostBack="true" OnSelectedIndexChanged="test" CausesValidation="true" ValidationGroup="DDLOnly">
                <asp:ListItem Value="0">---Select---</asp:ListItem>
                <asp:ListItem Value="1">Option1</asp:ListItem>
                <asp:ListItem Value="2">Option2</asp:ListItem>
                <asp:ListItem Value="3">Option3</asp:ListItem>
            </asp:DropDownList>
            <asp:DropDownList ID="ddl2" runat="server">
            </asp:DropDownList>
            <asp:RequiredFieldValidator ID="rfvTxt" runat="server" ControlToValidate="txt1" ValidationGroup="WholePage">*</asp:RequiredFieldValidator>
            <asp:TextBox ID="txt1" runat="server" ValidationGroup="WholePage"></asp:TextBox>
            <asp:Button ID="btn1" runat="server" Text="Button" OnClientClick="return Page_ClientValidate();" OnClick="btn" />
        </ContentTemplate>
    </asp:UpdatePanel>
    

    在后面的代码中:

    protected void test(object sender, EventArgs e)
    {
        ddl2.Items.Clear();
        for (int i = 0; i < 4; i++)
            ddl2.Items.Add(new ListItem("Test" + ddl1.SelectedIndex));
    }
    

    Populates the second DDL when any option is chosen, but not for the initial item of 0

    编辑:TextBoxButton 中添加了验证组;只有ddl1SelectedIndexChanged 上得到验证,但ddl1txt1 都在OnClick 上得到验证

    【讨论】:

    • @lain 它应该可以工作,因为causes 验证已启用。我不能这样做,因为现在这会验证页面上你没有尝试过的其他控件。
    • @Deeptechtons - 将你的 DDL 添加到它自己的验证组怎么样?您可以使用 JavaScript 来触发整个页面的验证组,以及从您的提交按钮触发 DDL 的验证组。 link
    • @lain 那是一种黑客行为,不是吗?所以没有任何直接的解决方案
    • @Deeptechtons :-) 我个人不会称其为“黑客”,Page_ClientValidate() 可以使用,您只能在按钮上指定一个事件处理程序。您可以通过在 JavaScript See here 中调用单个 Validator 来编写自己的 Validate 函数,而不是验证整个页面。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-17
    • 1970-01-01
    • 2011-07-24
    相关资源
    最近更新 更多