示例#1
0
        /// <summary>
        /// Builds a checkbox that allows multiple rows in a table to be
        /// selected
        /// </summary>
        public static MvcHtmlString RowCheckboxFor <TModel>(this HtmlHelper <TModel> helper,
                                                            Expression <Func <TModel, long> > idProperty, dynamic htmlAttributes = null)
        {
            if (idProperty.NodeType != ExpressionType.Lambda ||
                idProperty.Body.NodeType != ExpressionType.MemberAccess)
            {
                throw new ArgumentException(nameof(idProperty));
            }
            var value = idProperty.Compile()(helper.ViewData.Model).ToString();

            var inputTag = new TagBuilder("input");

            inputTag.MergeAttribute("name", "ids");
            inputTag.MergeAttribute("type", "checkbox");
            inputTag.MergeAttribute("value", value);
            inputTag.MergeAttribute("id", string.Format("id{0}", controlId++));
            IDictionary <string, string> properties =
                TagBuilderExtensions.DynamicToProperties(htmlAttributes);

            inputTag.AddCustomHtmlAttributes(properties);
            return(MvcHtmlString.Create(inputTag.ToString()));
        }
示例#2
0
        public static MvcHtmlString MultiSelectTextBoxFor <TModel, TProp>(
            this HtmlHelper <TModel> helper,
            Expression <Func <TModel, UpdatableField <TProp> > > updatableField,
            dynamic htmlAttributes = null)
        {
            if (updatableField.NodeType != ExpressionType.Lambda ||
                updatableField.Body.NodeType != ExpressionType.MemberAccess)
            {
                throw new ArgumentException(nameof(updatableField));
            }
            var node       = updatableField.Body as MemberExpression;
            var fieldName  = node.Member.Name;
            var fieldValue = updatableField.Compile()(helper.ViewData.Model);

            var indeterminateFlagElement = new TagBuilder("input");

            indeterminateFlagElement.MergeAttribute("name",
                                                    string.Format("{0}_IsIndeterminate", fieldName));
            indeterminateFlagElement.MergeAttribute("type", "hidden");
            indeterminateFlagElement.MergeAttribute("class", "kaia-ms-flag");
            indeterminateFlagElement.MergeAttribute("value",
                                                    fieldValue.IsIndeterminate.ToString());

            var oldValueElement = new TagBuilder("input");

            oldValueElement.MergeAttribute("name",
                                           string.Format("{0}_OldValue", fieldName));
            oldValueElement.MergeAttribute("type", "hidden");
            oldValueElement.MergeAttribute("class", "kaia-ms-old");
            if (fieldValue.IsIndeterminate)
            {
                oldValueElement.MergeAttribute("value", MultiSelectMessage);
            }
            else
            {
                oldValueElement.MergeAttribute("value", fieldValue.Value.ToString());
            }

            var newValueElement = new TagBuilder("input");

            // TODO: Add better intelligent input types, e.g., based on
            // DataTypeAttribute
            newValueElement.MergeAttribute("name",
                                           string.Format("{0}_NewValue", fieldName));
            newValueElement.MergeAttribute("type", "text");
            newValueElement.MergeAttribute("class", "kaia-ms-new form-control");
            if (!fieldValue.IsUpdatable)
            {
                newValueElement.MergeAttribute("readonly", "readonly");
            }
            if (fieldValue.IsUpdated || !fieldValue.IsIndeterminate)
            {
                newValueElement.MergeAttribute("value", fieldValue.Value.ToString());
            }
            else
            {
                newValueElement.MergeAttribute("value", MultiSelectMessage);
            }
            IDictionary <string, string> properties =
                TagBuilderExtensions.DynamicToProperties(htmlAttributes);

            newValueElement.AddCustomHtmlAttributes(properties);

            var controlElement = new TagBuilder("span");

            controlElement.MergeAttribute("class", "kaia-ms-ctl");
            controlElement.MergeAttribute("data-kaia-ms-name", fieldName);
            controlElement.InnerHtml = string.Join(Environment.NewLine,
                                                   new string[]
            {
                indeterminateFlagElement.ToString(),
                oldValueElement.ToString(),
                newValueElement.ToString()
            });

            var result = MvcHtmlString.Create(controlElement.ToString());

            return(result);
        }