using System; using System.Globalization; using System.Linq.Expressions; using System.Text; using System.Web.Mvc; using Kreta.Framework; namespace Kreta.Web.Helpers { public static class RangeNumericExtensions { public static MvcHtmlString KretaRangeNumeric(this HtmlHelper helper, Expression> fromexpression, Expression> toexpression, string title = "", int? precision = null, double? step = null) { var spinStep = (step ?? 1).ToString(CultureInfo.InvariantCulture.NumberFormat); var fromFieldName = ExpressionHelper.GetExpressionText(fromexpression); var fromFullBindingName = helper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(fromFieldName); var fromMetadata = ModelMetadata.FromLambdaExpression(fromexpression, helper.ViewData); var fromDisplayName = fromMetadata.DisplayName; var fromValue = fromMetadata.Model; var fromValidationAttributes = helper.GetUnobtrusiveValidationAttributes(fromFullBindingName, fromMetadata); object globalMinValue = Constants.General.KretaRangeNumericSideBarMinValue; if (fromValidationAttributes.Count > 0) { foreach (var item in fromValidationAttributes) { if (item.Key == "data-val-range-min") { globalMinValue = item.Value; } } } int decimalPrecision = precision ?? (globalMinValue != null && globalMinValue is Double ? 2 : 0); var toFieldName = ExpressionHelper.GetExpressionText(toexpression); var toFullBindingName = helper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(toFieldName); var toMetadata = ModelMetadata.FromLambdaExpression(toexpression, helper.ViewData); var toDisplayName = toMetadata.DisplayName; var toValue = toMetadata.Model; var toValidationAttributes = helper.GetUnobtrusiveValidationAttributes(toFullBindingName, toMetadata); object globalMaxValue = Constants.General.KretaRangeNumericSideBarMaxValue; if (toValidationAttributes.Count > 0) { foreach (var item in toValidationAttributes) { if (item.Key == "data-val-range-max") { globalMaxValue = item.Value; } } } decimalPrecision = precision ?? (globalMaxValue != null && globalMaxValue is Double ? 2 : 0); StringBuilder sb = new StringBuilder(); string fromDate = ""; string toDate = ""; string scriptTag = @""; string displayName = ""; if (!string.IsNullOrWhiteSpace(title)) { displayName = title; } else { if (!string.IsNullOrWhiteSpace(fromDisplayName)) { displayName = fromDisplayName; } else { if (!string.IsNullOrWhiteSpace(toDisplayName)) { displayName = toDisplayName; } } } sb.Append("
"); sb.Append(""); sb.Append("
"); sb.Append("
"); sb.Append(fromDate).Append(" ").Append(toDate).Append(scriptTag); sb.Append("
"); return new MvcHtmlString(sb.ToString()); } public static MvcHtmlString KretaRangeNumericSideBar(this HtmlHelper helper, Expression> fromexpression, Expression> toexpression, string title = "", int? precision = null, bool needTolIgLabels = false, double? step = null) { var spinStep = (step ?? 1).ToString(CultureInfo.InvariantCulture.NumberFormat); var fromFieldName = ExpressionHelper.GetExpressionText(fromexpression); var fromFullBindingName = helper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(fromFieldName); var fromMetadata = ModelMetadata.FromLambdaExpression(fromexpression, helper.ViewData); var fromDisplayName = fromMetadata.DisplayName; var fromValue = fromMetadata.Model; var fromValidationAttributes = helper.GetUnobtrusiveValidationAttributes(fromFullBindingName, fromMetadata); object globalMinValue = Constants.General.KretaRangeNumericSideBarMinValue; if (fromValidationAttributes.Count > 0) { foreach (var item in fromValidationAttributes) { if (item.Key == "data-val-range-min") { globalMinValue = item.Value; } } } int decimalPrecision = precision ?? (globalMinValue != null && globalMinValue is Double ? 2 : 0); var toFieldName = ExpressionHelper.GetExpressionText(toexpression); var toFullBindingName = helper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(toFieldName); var toMetadata = ModelMetadata.FromLambdaExpression(toexpression, helper.ViewData); var toDisplayName = toMetadata.DisplayName; var toValue = toMetadata.Model; var toValidationAttributes = helper.GetUnobtrusiveValidationAttributes(toFullBindingName, toMetadata); object globalMaxValue = Constants.General.KretaRangeNumericSideBarMaxValue; if (toValidationAttributes.Count > 0) { foreach (var item in toValidationAttributes) { if (item.Key == "data-val-range-max") { globalMaxValue = item.Value; } } } decimalPrecision = precision ?? (globalMaxValue != null && globalMaxValue is Double ? 2 : 0); StringBuilder sb = new StringBuilder(); string fromDate = ""; string toDate = ""; string scriptTag = @""; string displayName = ""; if (!string.IsNullOrWhiteSpace(title)) { displayName = title; } else { if (!string.IsNullOrWhiteSpace(fromDisplayName)) { displayName = fromDisplayName; } else { if (!string.IsNullOrWhiteSpace(toDisplayName)) { displayName = toDisplayName; } } } sb.Append("
"); sb.Append("
"); sb.Append(""); sb.Append("
"); sb.Append("
"); sb.Append(fromDate).Append("
").Append(toDate).Append(scriptTag); sb.Append("
"); sb.Append("
"); return new MvcHtmlString(sb.ToString()); } } }