我在遗留代码库中工作,其中存在带有控件的表单,这些控件分布在 asp.net 应用程序的 ascx 文件中。
表单将从数据库加载数据,对于某些加载数据的特定情况,表单显示为灰色(不可编辑),包括多个复选框等控件。
示例代码是:
<div>
<p style="border-width:3px; border-style:solid; border-color:#0000FF; padding: 1em;"> Select all groups(s) that apply or select not applicable.</p>
<%=OurInputHelpers.MultipleCheckBoxes(true, "Group", Model.GetIdsNamesList_SelectedGroups(), "Group", null)%>
</div>
我正在寻找如何控制表单的可编辑性的机制,并且对于某些输入数据它是灰色的。
MultipleCheckBoxes 的 C# 代码隐藏如下,但我认为它不会提供太多见解:[这是遗留代码,所以我没有得到编写它的荣誉]
public static string MultipleCheckBoxes(bool requiredField, string modelFieldName, List<IdNameListItem> items, string label, string optionalCheckBoxClassName, bool eachOnSeparateLine = false)
{
// NOTE: the following prefaces are needed for javascript error processing to work:
String inputFieldID = "inpt_" + modelFieldName;
String labelFieldID = "lbl_" + modelFieldName;
StringBuilder sb = new StringBuilder();
// NOTE: for this type of ctl we have to surround it with a div tag, so that javascript error processing can apply a red border if need be
sb.AppendFormat("<div id=\"{0}\">", inputFieldID);
// sb.Append("<span>");
sb.Append(LabelTag(requiredField, null, label, labelFieldID));
bool firstLine = true;
foreach (IdNameListItem itm in items)
{
if (eachOnSeparateLine)
{
if (firstLine)
{
firstLine = false;
}
else
{
sb.Append("<br/>");
}
}
string modifiedFieldName = "CheckBoxMulti_" + modelFieldName + "^" + itm.id.ToString();
string isCheckedClause = (string)(itm.isSelected ? "checked=\"checked\" " : string.Empty);
if (optionalCheckBoxClassName == null)
{
sb.AppendFormat("<input type=\"checkbox\" id=\"{0}\" name=\"{1}\" {2} />{3} ",
modifiedFieldName, modifiedFieldName, isCheckedClause, itm.name);
}
else
{
sb.AppendFormat("<input type=\"checkbox\" id=\"{0}\" class=\"{1}\" name=\"{2}\" {3} />{4} ",
modifiedFieldName, optionalCheckBoxClassName, modifiedFieldName, isCheckedClause, itm.name);
}
}
// sb.Append("<br/></span>");
sb.Append("<br/>");
sb.Append("</div>");
return sb.ToString();
}
但是,我找不到控件变灰的确切机制,因此发布的代码只能提供部分帮助。
目标:当控件(例如多复选框)变灰时,我想有条件地向用户隐藏说明。