我有一个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/