删除复选框数组的代码冗余

时间:2013-10-24 17:48:50

标签: asp.net

我在ASP.Net页面中有一系列复选框。每个复选框都调用单个函数,该函数接受复选框id作为参数。

问题是代码现在是多余的。有没有办法概括代码。附上以下示例代码:

        protected void chkAddlDetails_CheckedChanged(object sender, EventArgs e)
        {
            if (chkAddlDetails.Checked == true)
            {
                blnShouldLock("chkAddlDetails");
                Panel9.Visible = true;
            }
            else
            {
                Panel9.Visible = false;
            }
        }
        protected void chkDeValidate_CheckedChanged(object sender,EventArgs e)
        {
            if (chkDeValidate.Checked == true)
            {
                blnShouldLock("chkDeValidate");
                Panel10.Visible = true;
            }
            else
            {
                Panel10.Visible = false;
            }
        }
        ............
        ............ and similar code repeats for other check boxes

随着复选框数量的增加,代码正在扩展并变得更加冗余。

任何人都可以协助使用通用代码来避免冗余。感谢是否可以提供伪代码。

谢谢。

2 个答案:

答案 0 :(得分:0)

对所有复选框使用相同的事件。然后,您可以将sender投射到触发事件的CheckBox

如果每个面板对应一个复选框,则可以使用复选框的名称命名面板,并使用“面板”将其后缀。例如,名为chkDevalidate的复选框可以有一个名为chkDevalidatePanel的面板,以下方法适用于所有复选框。如果同一个面板被多个复选框显示或隐藏,您需要使用Dictionary或类似的方式在彼此之间映射它们。

protected void GenericCheckedChanged(object sender, EventArgs e)
{
    CheckBox checkbox = (CheckBox)sender;
    Panel panel = (Panel)Page.FindControl(checkbox.ID + "Panel");

    if (checkbox.Checked)
    {
        blnShouldLock(checkbox.ID);
        panel.Visible = true;
    }
    else
    {
        panel.Visible = false;
    }
}

答案 1 :(得分:0)

或没有if。

panel.Visible = checkbox.Checked