2017年10月10日 星期二

mono在.net4.0中checkboxlist狀態無法正常呈現的解決方式

如果有使用checkboxlist在mono中會發現一是裡面的值無法正常儲存,可參考以下解法:


解法1:

在web.config中的<system.web>區塊中加上此行

<pages controlRenderingCompatibilityVersion="3.5" />


註.但有可能影響到其他有用到4.0以上的元件呈現,例如:MenuItem



解法2:

在Page_PreRender中加上以下函式


protected void Page_PreRender(object sender, EventArgs e)
        {
            setCheckBoxStates([你的checkboxlist名稱]);
        }



private void setCheckBoxStates(CheckBoxList cbl)
        {
            if (IsPostBack)
            {
                string cblFormID = cbl.ClientID.Replace("_", "$");
                int i = 0;
                foreach (var item in cbl.Items)
                {
                    string itemSelected = Request.Form[cblFormID + "$" + i];
                    if (itemSelected != null && itemSelected != String.Empty)
                        ((ListItem)item).Selected = true;
                    i++;
                }
            }
        }


這只能保持你的選取狀態是正常的,但選取的值如果用一般寫法仍會無法儲存,所以同理改寫成以下方式


 string calids = "";
                string cblFormID = [你的checkboxlist名稱].ClientID.Replace("_", "$");
                int i = 0;
                foreach (var item in [你的checkboxlist名稱].Items)
                {
                    string itemSelected = Request.Form[cblFormID + "$" + i];
                    if (itemSelected != null && itemSelected != String.Empty)
                        if (calids == "")
                        {
                            calids = itemSelected;
                        }
                        else
                        {
                            calids += "," + itemSelected;
                        }
                    i++;
                }


註.checkboxlist的命名規則不可包含有「_」底線,不然會一樣被過濾成$導致無法正常運作


熱門文章