代码之家  ›  专栏  ›  技术社区  ›  JosephDoggie

ascx用户控件窗体对于某些输入是不可编辑的,因此需要隐藏说明

  •  0
  • JosephDoggie  · 技术社区  · 3 年前

    我使用的是遗留代码库,其中有一些表单和控件分布在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}&nbsp;&nbsp;",
                          modifiedFieldName, modifiedFieldName, isCheckedClause, itm.name);
                }
                else
                {
                    sb.AppendFormat("<input type=\"checkbox\" id=\"{0}\" class=\"{1}\" name=\"{2}\" {3} />{4}&nbsp;&nbsp;",
                          modifiedFieldName, optionalCheckBoxClassName, modifiedFieldName, isCheckedClause, itm.name);
                }
            }
         //   sb.Append("<br/></span>");
            sb.Append("<br/>");
            sb.Append("</div>");
            return sb.ToString();
    
        }
    

    然而,我找不到控件变灰的确切机制,所以发布的代码只会有部分帮助。

    目标:当控件(如多个复选框)变灰时,我想有条件地向用户隐藏指令。

    0 回复  |  直到 3 年前
        1
  •  0
  •   JosephDoggie    3 年前

    实际上,在代码库中有: 多个复选框 和 RO_多个复选框 其中RO_代表“只读”

    因此,我问的问题有点没有意义,因为人们只是没有把指令标签放在有RO_MultipleCheckBoxes的地方。

    此外,如果不访问我们的整个代码库,任何人都很难解决这个问题。

    然而,我打算(暂时)不提这个问题,因为它可能有助于其他人思考这些情况。