【问题标题】:ASP.NET Webforms Checkbox event sending argumentASP.NET Webforms Checkbox 事件发送参数
【发布时间】:2020-09-08 01:10:15
【问题描述】:

我基本上有很多复选框调用相同的功能。为了确定每个人应该触发的动作,我正在考虑为将要触发的函数传递一个参数。

我的复选框是这样的:

<asp:CheckBox ID="checkBoxRegul" runat="server" CssClass="" Visible="false" OnCheckedChanged='checkBoxRegularizarChangedEvent' AutoPostBack="True" />

我的功能是这样的:

protected void checkBoxRegularizarChangedEvent(object sender, EventArgs e)
{
    CheckBox cb = (CheckBox)sender;
}

如何通过 EventArgs 发送和接收信息?

谢谢!

【问题讨论】:

  • 一种方法是检查sender 的ID,一旦将其转换为正确的类型,您就可以这样做。然后,您可以根据 ID 确定要做什么。不过,我认为您不能直接将自定义信息放入 EventArgs 参数中。
  • 我不确定你在这里做什么,但从我收集到的信息来看,你应该研究一个 javascript 解决方案。

标签: c# asp.net checkbox


【解决方案1】:

这并不简单,但它是可行的。 EventArgs(e) 不能直接存储附加信息,但是可以创建一个自定义控件,自定义事件可以包含附加信息。

第 1 步:创建一个继承自 EventArgs(CheckBoxEventArgs.cs) 的 CheckBoxEventArgs 类。添加公共属性以保存您需要的信息。

public class CheckBoxEventArgs: EventArgs
{
    public string ValueOne { get; set; }
    public string ValueTwo { get; set; }
     
}

第 2 步:将自定义 .ascx 控件添加到您的项目 (CustomCheckBox.ascx)。向 HTML 添加一个复选框。

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="CustomCheckBox.ascx.cs" Inherits="CustomControls.CustomCheckBox" %>
<asp:CheckBox ID="chkCheckBox" runat="server" OnCheckedChanged="chkCheckBox_CheckedChanged" AutoPostBack="True" />

自定义代码隐藏如下:

  • 使用自定义 EventHandler 定义 CheckChanged 事件
  • 添加属性以存储自定义复选框值
  • 添加一个文本属性并将值传递给复选框文本
  • 响应 CheckChanged 事件并引发您的自定义事件

//CustomCheckBox.cs

public partial class CustomCheckBox : System.Web.UI.UserControl
{

    public event EventHandler<CheckBoxEventArgs> CheckChanged;
    
    public string ValueOne { get; set; }
    public string ValueTwo { get; set; }
    
    public string Text
    {
        get { return chkCheckBox.Text; }
        set { chkCheckBox.Text = value; }
    }
    
    protected void Page_Load(object sender, EventArgs e)
    {
    }

    protected void chkCheckBox_CheckedChanged(object sender, EventArgs e)
    {
    
        if (CheckChanged != null)
        {
             var args = new CheckBoxEventArgs()
             {
                 ValueOne = this.ValueOne,
                 ValueTwo = this.ValueTwo
             };
            CheckChanged(this, args);
        }
    
    }

}

第 3 步:将 CustomCheckBox.ascx 添加到您的页面并注册 OnCheckChanged 事件。

<%@ Register src="CustomCheckBox.ascx" tagname="CustomCheckBox" tagprefix="uc1" %>
...
<uc1:CustomCheckBox ID="CustomCheckBox1" runat="server" AutoPostBack="True" OnCheckChanged="CustomCheckBox1_OnCheckChanged" ValueOne="one" ValueTwo="two"/>

将代码添加到代码隐藏页面以响应您的自定义 checkchanged 事件,并使用自定义值(它们可直接从您创建的 customEventArgs (e) 中获得)

public partial class PageOne : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void CustomCheckBox1_OnCheckChanged(object sender, CheckBoxEventArgs e)
    {
        var val1 = e.ValueOne;
        var val2 = e.ValueTwo;

        //use custom values
    }
}

【讨论】:

    【解决方案2】:

    对不起,你不能,EventArgs 没有任何属性来保存你想要的东西。

    您需要将每个复选框映射到不同的事件处理程序,或者在 checkBoxRegularizarChangedEvent 中检查复选框的值。

    或者...就像蒂姆说的,您可以检查发件人类别。

    没有“正确”的答案,这取决于您的需求。

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2021-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-16
      • 2011-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多