【问题标题】:Nested usercontrol Linkbutton Onclick event not firing after postback - asp.net/C#回发后嵌套的用户控件链接按钮 Onclick 事件未触发 - asp.net/C#
【发布时间】:2011-09-13 15:42:05
【问题描述】:

我正在对一系列表单使用嵌套控件,并且 onclick 事件有问题。

我只是使用文本框和手动代码隐藏插入而不是 Gridview/Details 视图结构。

场景是我有一个汽车保险表格,用户可以在其中添加其他指定的司机。顶部是一个部分,您可以在其中添加自己的详细信息(这是一个单独的用户控件),下面是一个部分,您可以在其中添加最多 4 个命名驱动程序(这也是一个单独的用户控件)。我想做的是使用我的“添加驱动程序”链接按钮 onclick 事件将详细信息添加到数据库中,然后清除表单字段,以便用户可以添加另一个驱动程序。这一切正常,直到您再次单击“添加驱动程序”按钮并发现它不起作用。

这是包含 Add Driver 用户控件的父控件:

        <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"吗?
  • 嗨詹姆斯 - 好主意。它没有导致回发,但我设置了 CausesValidation = "false" 并且它确实有效。唯一的麻烦是,我需要它来进行验证,所以还没有完全解决。不过那太好了……

标签: c# asp.net webforms


【解决方案1】:

听起来您可能有一些验证会阻止按钮进行回发。尝试设置CausesValidation="false" 看看是否会有所不同。

如果验证导致问题,我会将验证分成组并将按钮分配给特定组,或者根据某些条件切换验证器的启用状态,例如:

RequiredFieldValidator1.Enabled = Panel1.Visible;

【讨论】:

  • 嗨詹姆斯 - 你是绝对正确的。如果字段被隐藏,我的验证器会被 javascript 禁用,但它们仍然无法验证服务器端。我在 onclick 事件中添加了一些代码,以找出哪个验证器失败并在满足正确条件时手动禁用它们。感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-25
  • 1970-01-01
  • 2018-07-11
相关资源
最近更新 更多