Ejemplo n.º 1
0
        private static MvcHtmlString ExtCheckBoxListSingleColumnFor <TModel, TValue>(this HtmlHelper <TModel> htmlHelper,
                                                                                     Expression <Func <TModel, IEnumerable <TValue> > > expression, IEnumerable <SelectListItem> values,
                                                                                     IEnumerable <TValue> selectedIds, object htmlAttributes = null)
        {
            var isDisabled = false;
            var html       = htmlAttributes == null
                ? new RouteValueDictionary()
                : new RouteValueDictionary(htmlAttributes);

            if (html["disabled"] != null && html["disabled"].ToString() == "disabled")
            {
                isDisabled = true;
            }

            var selectedValues = selectedIds.Select(x => x.ToString()).ToList();
            var variableName   = ExpressionHelper.GetExpressionText(expression);
            var stringBuilder  = new StringBuilder();

            foreach (var selectListItem in values)
            {
                var itemName = htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(variableName);
                var itemId   = itemName + CustomControlHelper.GetControlCount(itemName);

                var divBuilder = new TagBuilder("div");
                divBuilder.AddCssClass("checkbox");
                if (isDisabled)
                {
                    divBuilder.AddCssClass("disabled");
                }

                var labelBuilder = new TagBuilder("label");
                labelBuilder.MergeAttribute("for", itemId);

                var inputBuilder = new TagBuilder("input");
                if (selectedValues.Contains(selectListItem.Value))
                {
                    inputBuilder.MergeAttribute("checked", "checked");
                }
                if (isDisabled)
                {
                    inputBuilder.MergeAttribute("disabled", "disabled");
                }
                inputBuilder.MergeAttribute("id", itemId);
                inputBuilder.MergeAttribute("name", itemName);
                inputBuilder.MergeAttribute("type", "checkbox");
                inputBuilder.MergeAttribute("value", selectListItem.Value);

                var labelInner = inputBuilder + selectListItem.Text;
                labelBuilder.InnerHtml = labelInner;
                divBuilder.InnerHtml   = labelBuilder.ToString();
                stringBuilder.Append(divBuilder);
            }

            return(CustomControlHelper.GenerateWithValidationMessage(htmlHelper, stringBuilder.ToString(), expression));
        }
Ejemplo n.º 2
0
        public static MvcHtmlString ExtCheckBoxListFor <TModel, TValue>(this HtmlHelper <TModel> htmlHelper,
                                                                        Expression <Func <TModel, IEnumerable <TValue> > > expression, IEnumerable <SelectListItem> values,
                                                                        IEnumerable <TValue> selectedIds, int columnNumber = 1, object htmlAttributes = null)
        {
            if (columnNumber <= 1)
            {
                return(htmlHelper.ExtCheckBoxListSingleColumnFor(expression, values, selectedIds, htmlAttributes));
            }

            var isDisabled = false;
            var html       = htmlAttributes == null
                ? new RouteValueDictionary()
                : new RouteValueDictionary(htmlAttributes);

            if (html["disabled"] != null && html["disabled"].ToString() == "disabled")
            {
                isDisabled = true;
            }

            var variableName = ExpressionHelper.GetExpressionText(expression);
            var itemName     = htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(variableName);

            var selectedValues  = selectedIds.Select(x => x.ToString()).ToList();
            var selectListItems = values.ToList();
            var rowNumber       = selectListItems.Count / columnNumber + 1;

            var tableBuilder = new TagBuilder("table");

            for (var rowIndex = 0; rowIndex < rowNumber; rowIndex++)
            {
                var trBuilder = new TagBuilder("tr");
                for (var columnIndex = 0; columnIndex < columnNumber; columnIndex++)
                {
                    var itemIndex = rowIndex * columnNumber + columnIndex;
                    if (itemIndex >= selectListItems.Count)
                    {
                        break;
                    }

                    var itemId = itemName + CustomControlHelper.GetControlCount(itemName);

                    var inputBuilder = new TagBuilder("input");
                    inputBuilder.MergeAttribute("id", itemId);
                    inputBuilder.MergeAttribute("name", itemName);
                    inputBuilder.MergeAttribute("type", "checkbox");
                    inputBuilder.MergeAttribute("value", selectListItems[itemIndex].Value);
                    if (selectedValues.Contains(selectListItems[itemIndex].Value))
                    {
                        inputBuilder.MergeAttribute("checked", "checked");
                    }
                    if (isDisabled)
                    {
                        inputBuilder.MergeAttribute("disabled", "disabled");
                    }

                    var labelInner = inputBuilder + selectListItems[itemIndex].Text;

                    var labelBuilder = new TagBuilder("label");
                    labelBuilder.MergeAttribute("for", itemId);
                    labelBuilder.InnerHtml = labelInner;

                    var divBuilder = new TagBuilder("div");
                    //divBuilder.AddCssClass("checkbox");
                    if (isDisabled)
                    {
                        divBuilder.AddCssClass("disabled");
                    }
                    divBuilder.InnerHtml = labelBuilder.ToString();

                    var tdBuilder = new TagBuilder("td")
                    {
                        InnerHtml = divBuilder.ToString()
                    };
                    trBuilder.InnerHtml += tdBuilder.ToString();
                }

                tableBuilder.InnerHtml += trBuilder.ToString();
            }

            return(CustomControlHelper.GenerateWithValidationMessage(htmlHelper, tableBuilder.ToString(), expression));
        }
Ejemplo n.º 3
0
        public static MvcHtmlString ExtMultiSelectFor <TModel, TValue>(this HtmlHelper <TModel> htmlHelper,
                                                                       Expression <Func <TModel, IEnumerable <TValue> > > expression, IEnumerable <SelectListItem> values,
                                                                       IEnumerable <TValue> selectedIds, string controlId, object htmlAttributes = null)
        {
            var isDisabled = false;
            var html       = htmlAttributes == null
                ? new RouteValueDictionary()
                : new RouteValueDictionary(htmlAttributes);

            if (html["disabled"] != null && html["disabled"].ToString() == "disabled")
            {
                isDisabled = true;
            }

            var selectListItems = values.ToList();

            var leftListBuilder = new TagBuilder("select");

            leftListBuilder.AddCssClass("form-control");
            leftListBuilder.MergeAttribute("name", "leftList" + CustomControlHelper.GetControlCount("leftList"));
            leftListBuilder.MergeAttribute("id", controlId + "_from");
            leftListBuilder.MergeAttribute("size", "8");
            leftListBuilder.MergeAttribute("multiple", "multiple");
            if (isDisabled)
            {
                leftListBuilder.MergeAttribute("disabled", "disabled");
            }

            foreach (var selectListItem in selectListItems)
            {
                var optionBuilder = new TagBuilder("option");
                optionBuilder.MergeAttribute("value", selectListItem.Value);
                optionBuilder.SetInnerText(selectListItem.Text);
                leftListBuilder.InnerHtml += optionBuilder.ToString();
            }

            var leftColumnBuilder = new TagBuilder("div");

            leftColumnBuilder.AddCssClass("col-xs-5");
            leftColumnBuilder.InnerHtml = leftListBuilder.ToString();

            var rightAllIconBuilder = new TagBuilder("i");

            rightAllIconBuilder.AddCssClass("glyphicon");
            rightAllIconBuilder.AddCssClass("glyphicon-forward");

            var rightAllButtonBuilder = new TagBuilder("button");

            rightAllButtonBuilder.MergeAttribute("type", "button");
            rightAllButtonBuilder.MergeAttribute("id", controlId + "_rightAll");
            rightAllButtonBuilder.AddCssClass("btn");
            rightAllButtonBuilder.AddCssClass("btn-block");
            rightAllButtonBuilder.InnerHtml = rightAllIconBuilder.ToString();

            var rightSelectedIconBuilder = new TagBuilder("i");

            rightSelectedIconBuilder.AddCssClass("glyphicon");
            rightSelectedIconBuilder.AddCssClass("glyphicon-chevron-right");

            var rightSelectedButtonBuilder = new TagBuilder("button");

            rightSelectedButtonBuilder.MergeAttribute("type", "button");
            rightSelectedButtonBuilder.MergeAttribute("id", controlId + "_rightSelected");
            rightSelectedButtonBuilder.AddCssClass("btn");
            rightSelectedButtonBuilder.AddCssClass("btn-block");
            rightSelectedButtonBuilder.InnerHtml = rightSelectedIconBuilder.ToString();

            var leftSelectedIconBuilder = new TagBuilder("i");

            leftSelectedIconBuilder.AddCssClass("glyphicon");
            leftSelectedIconBuilder.AddCssClass("glyphicon-chevron-left");

            var leftSelectedButtonBuilder = new TagBuilder("button");

            leftSelectedButtonBuilder.MergeAttribute("type", "button");
            leftSelectedButtonBuilder.MergeAttribute("id", controlId + "_leftSelected");
            leftSelectedButtonBuilder.AddCssClass("btn");
            leftSelectedButtonBuilder.AddCssClass("btn-block");
            leftSelectedButtonBuilder.InnerHtml = leftSelectedIconBuilder.ToString();

            var leftAllIconBuilder = new TagBuilder("i");

            leftAllIconBuilder.AddCssClass("glyphicon");
            leftAllIconBuilder.AddCssClass("glyphicon-backward");

            var leftAllButtonBuilder = new TagBuilder("button");

            leftAllButtonBuilder.MergeAttribute("type", "button");
            leftAllButtonBuilder.MergeAttribute("id", controlId + "_leftAll");
            leftAllButtonBuilder.AddCssClass("btn");
            leftAllButtonBuilder.AddCssClass("btn-block");
            leftAllButtonBuilder.InnerHtml = leftAllIconBuilder.ToString();

            if (isDisabled)
            {
                rightAllButtonBuilder.AddCssClass("disabled");
                rightSelectedButtonBuilder.AddCssClass("disabled");
                leftSelectedButtonBuilder.AddCssClass("disabled");
                leftAllButtonBuilder.AddCssClass("disabled");
                rightAllButtonBuilder.MergeAttribute("disabled", "disabled");
                rightSelectedButtonBuilder.MergeAttribute("disabled", "disabled");
                leftSelectedButtonBuilder.MergeAttribute("disabled", "disabled");
                leftAllButtonBuilder.MergeAttribute("disabled", "disabled");
            }

            var middleColumnBuilder = new TagBuilder("div");

            middleColumnBuilder.AddCssClass("col-xs-2");
            middleColumnBuilder.InnerHtml += rightAllButtonBuilder.ToString();
            middleColumnBuilder.InnerHtml += rightSelectedButtonBuilder.ToString();
            middleColumnBuilder.InnerHtml += leftSelectedButtonBuilder.ToString();
            middleColumnBuilder.InnerHtml += leftAllButtonBuilder.ToString();

            var variableName = ExpressionHelper.GetExpressionText(expression);
            var itemName     = htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(variableName);

            var rightListBuilder = new TagBuilder("select");

            rightListBuilder.AddCssClass("form-control");
            rightListBuilder.MergeAttribute("name", itemName);
            rightListBuilder.MergeAttribute("id", controlId + "_to");
            rightListBuilder.MergeAttribute("size", "8");
            rightListBuilder.MergeAttribute("multiple", "multiple");

            if (isDisabled)
            {
                rightListBuilder.MergeAttribute("disabled", "disabled");
            }

            foreach (var selectedId in selectedIds)
            {
                var selectedItem = selectListItems.FirstOrDefault(x => x.Value == selectedId.ToString());
                if (selectedItem == null)
                {
                    continue;
                }

                var optionBuilder = new TagBuilder("option");
                optionBuilder.MergeAttribute("value", selectedItem.Value);
                optionBuilder.SetInnerText(selectedItem.Text);
                rightListBuilder.InnerHtml += optionBuilder.ToString();
            }

            var rightColumnBuilder = new TagBuilder("div");

            rightColumnBuilder.AddCssClass("col-xs-5");
            rightColumnBuilder.InnerHtml = rightListBuilder.ToString();

            var rowBuilder = new TagBuilder("div");

            rowBuilder.AddCssClass("row");
            rowBuilder.InnerHtml  = leftColumnBuilder.ToString();
            rowBuilder.InnerHtml += middleColumnBuilder.ToString();
            rowBuilder.InnerHtml += rightColumnBuilder.ToString();

            var scriptBuilder = new TagBuilder("script");

            scriptBuilder.MergeAttribute("type", "text/javascript");
            scriptBuilder.InnerHtml = "jQuery(document).ready(function($) { $('#" + controlId + "').multiselect(); });";

            var stringBuilder = new StringBuilder();

            stringBuilder.AppendLine(rowBuilder.ToString());
            stringBuilder.AppendLine(scriptBuilder.ToString());

            return(CustomControlHelper.GenerateWithValidationMessage(htmlHelper, stringBuilder.ToString(), expression));
        }