嵌套的用户控件LinkButton在PostBack后无法触发OnClick事件 - asp.net/C#

3
我使用嵌套控件来管理一系列表单,但是在onclick事件上遇到了问题。
与GridView/DetailsView结构不同,我只使用了文本框和手动代码插入。
场景如下:我有一个汽车保险表单,用户可以添加其他命名的驾驶员。顶部是一个区域,您可以添加自己的详细信息(这是一个单独的用户控件),底部是一个区域,您可以添加最多4个命名的驾驶员(这也是一个单独的用户控件)。我想要做的是在“添加驾驶员”链接按钮的onclick事件中将详细信息添加到数据库中,然后清除表单字段,以便用户可以添加另一个驾驶员。这一切都很好地运作,直到你再次点击“添加驾驶员”按钮却发现它无法工作。
这是包含"添加驾驶员"用户控件的父控件:
        <h2>Add Permanent Driver</h2>
    <asp:ValidationSummary ID="uxValidationSummary" runat="server" ShowSummary="true" ValidationGroup="ChangeDetails" />
    <div class="clear"></div>
    <h3>
        Please enter your details below as they are on your insurance documents</h3>

    <uc1:UserDetails ID="uxUserDetails" runat="server" />

    <uc2:AddDriver ID="uxAddDriver" EntryType="Permanent" runat="server" />

这是AddDriver控件上添加驱动程序提交按钮的onclick事件的简化版本。
protected void uxSubmit_Click(object sender, EventArgs e)
    {
        Page.Validate("AddDriver");
        if (Page.IsValid)
        {
            DriverDAL.DriverTableAdapters.DriverTableAdapter taDriver = new DriverDAL.DriverTableAdapters.DriverTableAdapter();
            taDriver.DriverInsert(StartDate, EndDate, Title,
                FirstName, Surname, DateOfBirth, Gender);

            uxDriverList.DataBind();

            uxDate.Text = string.Empty;
            uxEndDate.Text = string.Empty;
            uxTitle.SelectedIndex = 0;
            uxFirstName.Text = string.Empty; 
            uxSurname.Text = string.Empty;
            uxDateOfBirth.Text = string.Empty;
            uxGender.SelectedIndex = 0;
        }   
    }

有什么方法可以在第一次OnClick之后重新激活这个链接按钮(或者删除它并重新创建它),以便我可以添加多个驱动程序?我尝试在提交后对按钮进行数据绑定,但是像预期的那样没有效果,但这就是我要寻找的东西。我无法重定向页面,因为如本帖早些时候提到的,它正在使用嵌套控件,并且我通过DropDownList的SelectedIndexChanged事件到达该表单。
欢迎任何想法-谢谢。如果需要更多信息,请告诉我。

这个按钮是否仍会导致页面回发,还是没有任何反应?你尝试过设置 CausesValidation="false" 吗? - James Johnson
嗨詹姆斯 - 好主意。它沒有引起回傳,但我已經設置了 CausesValidation = "false",它確實可以工作。唯一的麻煩是,我需要它引起驗證,所以還沒完全解決。不過還是很棒的... - e-on
1个回答

3
似乎您的按钮受到了一些验证限制,导致无法执行回发操作。您可以尝试设置CausesValidation="false",看看是否有所改善。
如果验证是问题的原因,我建议将验证分组并将按钮分配给特定的组,或者基于某些条件切换验证器的启用状态。例如:
RequiredFieldValidator1.Enabled = Panel1.Visible;

嗨,詹姆斯 - 你是绝对正确的。如果字段被隐藏,我有一些验证器被JavaScript禁用,但它们仍然在服务器端失败验证。我在onclick事件中添加了一些代码,以找出哪个验证器失败,并在满足正确条件时手动禁用它们。感谢您的帮助。 - e-on

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接