c# - 启用和禁用控件在 asp.net 中无法正常工作

标签 c# asp.net

我有一个aspx 表单,我想在其中启用禁用 一些控制基于分配给相应用户的权限。

逻辑是这样的。

如果条件匹配到 Y 然后启用控件 else 控件应该被禁用。

所以,我根据条件写了下面的代码

if (Hid_Mode.Value != "M")
    {
        DataTable dtFill = new DataTable();
        SqlDataAdapter sda = new SqlDataAdapter("SELECT * FROM WMS_MENU_RIGHTS WHERE MKEY = '" + Session["UserId"].ToString() + "' and MENU_MKEY = '" + Request.QueryString["menuid"].ToString() + "'", constr);
        sda.Fill(dtFill);

        if (dtFill.Rows[0]["ADD_FLAG"].ToString() != "Y")
        {
            //Disable control
        }
        if (dtFill.Rows[0]["MODIFY_FLAG"].ToString() != "Y")
        {
            //Disable control
        }
        if (dtFill.Rows[0]["VIEW_FLAG"].ToString() != "Y")
        {
            //Disable control
        }
        if (dtFill.Rows[0]["DEL_FLAG"].ToString() != "Y")
        {
            //Disable control
        }
    }

public static void DisableFormControl(ControlCollection ChildCtrls)
{
    foreach (Control Ctrl in ChildCtrls)
    {
        if (Ctrl is TextBox)
            ((TextBox)Ctrl).Enabled = false;
        if (Ctrl is DropDownList)
            ((DropDownList)Ctrl).Enabled = false;
        if (Ctrl is CheckBoxList)
            ((CheckBoxList)Ctrl).Enabled = false;
        if (Ctrl is Button)
            ((Button)Ctrl).Enabled = false;
    }
}

但是这里发生的是

即使一个条件为 FALSE 而其他三个为 TRUE,它仍然会禁用整个控件。 我不知道为什么会这样

更新

在页面加载时我将禁用所有控件,然后再禁用。

DisableFormControl(Form.Controls);

    if (Hid_Mode.Value != "M")
    {
        DataTable dtFill = new DataTable();
        SqlDataAdapter sda = new SqlDataAdapter("SELECT * FROM WMS_MENU_RIGHTS WHERE MKEY = '" + Session["UserId"].ToString() + "' and MENU_MKEY = '" + Request.QueryString["menuid"].ToString() + "'", constr);
        sda.Fill(dtFill);

        if (dtFill.Rows[0]["ADD_FLAG"].ToString() == "Y")
        {
            txtAbbreviation.Enabled = true;
            txtdesc.Enabled = true;
            txtadd1.Enabled = true;
            txtadd2.Enabled = true;
            txtadd3.Enabled = true;
            ddlCountry.Enabled = true;
            check_desc.Enabled = true;
            btnSaveExit.Enabled = true;
            btnDelete.Enabled = false;
            btnClear.Enabled = true;
        }
        if (dtFill.Rows[0]["MODIFY_FLAG"].ToString() == "Y")
        {
            txtAbbreviation.Enabled = true;
            txtdesc.Enabled = true;
            txtadd1.Enabled = true;
            txtadd2.Enabled = true;
            txtadd3.Enabled = true;
            ddlCountry.Enabled = true;
            check_desc.Enabled = true;
            btnSaveExit.Enabled = true;
            btnDelete.Enabled = false;
            btnClear.Enabled = true;
        }
        if (dtFill.Rows[0]["VIEW_FLAG"].ToString() == "Y")
        {
            txtAbbreviation.Enabled = false;
            txtdesc.Enabled = false;
            txtadd1.Enabled = false;
            txtadd2.Enabled = false;
            txtadd3.Enabled = false;
            ddlCountry.Enabled = false;
            check_desc.Enabled = false;
            btnSaveExit.Enabled = false;
            btnDelete.Enabled = false;
            btnClear.Enabled = false;
        }
        if (dtFill.Rows[0]["DEL_FLAG"].ToString() == "Y")
        {
            txtAbbreviation.Enabled = true;
            txtdesc.Enabled = true;
            txtadd1.Enabled = true;
            txtadd2.Enabled = true;
            txtadd3.Enabled = true;
            ddlCountry.Enabled = true;
            check_desc.Enabled = true;
            btnSaveExit.Enabled = true;
            btnDelete.Enabled = true;
            btnClear.Enabled = true;
        }
    }

但即使条件为真,控件仍然被禁用

最佳答案

你有重叠的情况,我的建议是启用所有控件并在条件下禁用特定控件。我认为你必须让一些选项像查看和删除一样排他!因为它们相互抵消。这是我根据与您的讨论做出的您可以尝试的东西,您可能需要进一步调整它。

txtAbbreviation.Enabled = true;
txtdesc.Enabled = true;
txtadd1.Enabled = true;
txtadd2.Enabled = true;
txtadd3.Enabled = true;
ddlCountry.Enabled = true;
check_desc.Enabled = true;
btnSaveExit.Enabled = true;
btnDelete.Enabled = true;
btnClear.Enabled = true;

if (dtFill.Rows[0]["ADD_FLAG"].ToString() == "Y" || dtFill.Rows[0]["MODIFY_FLAG"].ToString() == "Y")
{
    btnDelete.Enabled = false;
}
bool enableAll = false;
if(dtFill.Rows[0]["DEL_FLAG"].ToString() == "Y")
    enableAll = true;
else
if(dtFill.Rows[0]["VIEW_FLAG"].ToString() == "Y")
    enableAll = false;

if(dtFill.Rows[0]["DEL_FLAG"].ToString() == "Y" || dtFill.Rows[0]["VIEW_FLAG"].ToString() == "Y")
{
    txtAbbreviation.Enabled = enableAll;
    txtdesc.Enabled = enableAll;
    txtadd1.Enabled = enableAll;
    txtadd2.Enabled = enableAll;
    txtadd3.Enabled = enableAll;
    ddlCountry.Enabled = enableAll;
    check_desc.Enabled = enableAll;
    btnSaveExit.Enabled = enableAll;
    btnDelete.Enabled = enableAll;
    btnClear.Enabled = enableAll;
}

请记住,在某些时候您不能有头和尾,有些选项不能共存,例如在您的情况下查看和删除。

关于c# - 启用和禁用控件在 asp.net 中无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41972978/

相关文章:

c# - 如何阅读用户写的内容(无需按回车键)- 控制台 C#

c# - 如何在 ASP.NET Web Api 服务中不抛出异常?

c# - 如何使纹理移动

c# - HTML 表在邮件中不起作用

c# - 如何从 C# 中的字符串生成非随机数?

jquery - asp.net 母版页头部内容中的 Javascript 似乎不起作用

c# - 从 View 中获取当前登录的用户

asp.net - 我可以使文件夹在中等信任中可写吗?

c# - Onclientclick如何使用Javascript更改表格的背景颜色

c# - 如何将这些嵌入元素转换为父元素的属性?