public static StandardRoute MapStandardRoute(this RouteCollection routeCollection, string routeName, string url, object defaults, object constraints, string[] routeNamespaces) { if (routeCollection == null) { throw new ArgumentNullException("routeCollection"); } var standardRoute = new StandardRoute(url, new MvcRouteHandler()) { Defaults = RouteValueDictionaryExtensions.Convert(defaults), Constraints = RouteValueDictionaryExtensions.Convert(constraints), DataTokens = new RouteValueDictionary() }; foreach (var @default in standardRoute.Defaults.ToList()) { if (@default.Value.ToString().Contains("*")) { standardRoute.Defaults.Remove(@default.Key); standardRoute.Defaults.Add(@default.Key, @default.Value.ToString().ReplaceAll("*", "")); } } if (routeNamespaces != null && routeNamespaces.Length > 0) { standardRoute.DataTokens["Namespaces"] = routeNamespaces; } routeCollection.Add(routeName, standardRoute); return(standardRoute); }
private MvcHtmlString LabelFor <TValue>(Expression <Func <TModel, TValue> > expression, object htmlAttributes = null, string expressionTypeName = null) { var modelMetadata = ModelMetadata.FromLambdaExpression(expression, _htmlHelper.ViewData); var expressionText = GetExpressionText(expression); var labelText = LabelText(modelMetadata, expressionText); if (string.IsNullOrEmpty(labelText)) { return(MvcHtmlString.Empty); } if (string.IsNullOrEmpty(expressionTypeName)) { expressionTypeName = GetExpressionTypeName(expression); } var templateInfo = _htmlHelper.ViewContext.ViewData.TemplateInfo; if (!string.IsNullOrEmpty(expressionTypeName)) { templateInfo.HtmlFieldPrefix = expressionTypeName; } var @for = templateInfo.GetFullHtmlFieldId(expressionText); var labelTag = new TagBuilder("label"); labelTag.MergeAttributes(RouteValueDictionaryExtensions.Convert(htmlAttributes)); labelTag.Attributes.Add("for", Sanitizer.Slug(@for)); labelTag.SetInnerText(labelText); return(MvcHtmlString.Create(labelTag.ToString(TagRenderMode.Normal))); }
public void ConvertToRouteValueDictionary_WithNull_ReturnsNull() { // Arrange, Act var dictionary = RouteValueDictionaryExtensions.ConvertToRouteValueDictionary(null); // Assert PAssert.IsTrue(() => dictionary == null); }
public static MvcHtmlString LocalizedRouteLinkWithId(this HtmlHelper htmlHelper, string key, object[] args, string routeName, long id, object routeValues = null, object htmlAttributes = null, string surroundUsing = "li", object surrounderAttributes = null, bool detectAndMarkAsActive = true, MvcHtmlString innerHtml = null) { var routeValueDictionary = RouteValueDictionaryExtensions.Convert(routeValues); routeValueDictionary.Add(KnownParameterNames.Id, id); return(htmlHelper.BuildRouteLink(htmlHelper.T(key, args), routeName, routeValueDictionary, htmlAttributes, surroundUsing, surrounderAttributes, detectAndMarkAsActive, innerHtml: innerHtml)); }
public static string RouteUrlWithId(this UrlHelper urlHelper, string routeName, long id, object routeValues) { var routeValueDictionary = RouteValueDictionaryExtensions.Convert(routeValues); routeValueDictionary.Add(KnownParameterNames.Id, id); return(urlHelper.RouteUrl(routeName, routeValueDictionary)); }
public static MvcHtmlString SignOutLink(this HtmlHelper htmlHelper, object routeValues = null, object htmlAttributes = null, string surroundUsing = "li", object surrounderAttributes = null, bool detectAndMarkAsActive = true, MvcHtmlString innerHtml = null) { var routeValuesDictionary = RouteValueDictionaryExtensions.Convert(routeValues); routeValuesDictionary.Add("then", htmlHelper.ViewContext.RequestContext.HttpContext.Request.Url.PathAndQuery); return(htmlHelper.LocalizedRouteLink(AuthenticateSectionConstants.SignController.Out.Commands.SignOut, AuthenticateSectionConstants.SignController.Out.RouteName, routeValuesDictionary, htmlAttributes, surroundUsing, surrounderAttributes, detectAndMarkAsActive, innerHtml)); }
public static string ListRouteUrl(this UrlHelper urlHelper, string routeName, int page, object routeValues = null) { var routeValueDictionary = RouteValueDictionaryExtensions.Convert(routeValues); routeValueDictionary.Add(KnownParameterNames.Page, page); return(urlHelper.RouteUrl(routeName, routeValueDictionary)); }
public static MvcHtmlString Pager <T>(this HtmlHelper htmlHelper, PagedList <T> pagedList, PagerOptions pagerOptions, string routeName, object routeValues, object htmlAttributes) { if (pagedList == null) { return(Pager(htmlHelper, pagerOptions, RouteValueDictionaryExtensions.Convert(htmlAttributes))); } return(Pager(htmlHelper, pagedList.TotalPageCount, pagedList.CurrentPageIndex, pagedList.PageSize, pagedList.TotalItemCount, null, null, pagerOptions, routeName, routeValues, htmlAttributes)); }
public void ConvertToRouteValueDictionary_WithObjectDictionary_ReturnsPopulatedDictionary() { // Arrange var routeValues = new { foo = "bar" }; // Act var dictionary = RouteValueDictionaryExtensions.ConvertToRouteValueDictionary(routeValues); // Assert PAssert.IsTrue(() => (string)dictionary["foo"] == "bar"); }
public void ConvertToRouteValueDictionary_WithObjectThatIsDictionary_JustReturnsObjectCastToDictionary() { // Arrange object routeValues = new RouteValueDictionary(); // Act var dictionary = RouteValueDictionaryExtensions.ConvertToRouteValueDictionary(routeValues); // Assert PAssert.IsTrue(() => routeValues == dictionary); }
private MvcHtmlString CheckBoxHelper(ModelMetadata modelMetadata, string name, bool?isChecked, object htmlAttributes, string expressionTypeName = null) { var attributes = RouteValueDictionaryExtensions.Convert(htmlAttributes); var explicitValue = isChecked.HasValue; if (explicitValue) { attributes.Remove("checked"); } return(InputHelper(InputType.CheckBox, modelMetadata, name, "true", !explicitValue, isChecked ?? false, true, false, htmlAttributes, expressionTypeName)); }
private static MvcHtmlString BuildRouteLink(this HtmlHelper htmlHelper, string linkText, string routeName, object routeValues = null, object htmlAttributes = null, string surroundUsing = "li", object surrounderAttributes = null, bool detectAndMarkAsActive = true, string activeClassName = "active", MvcHtmlString innerHtml = null) { var isCurrentRequest = false; if (detectAndMarkAsActive) { isCurrentRequest = IsCurrentRequest(new UrlHelper(htmlHelper.ViewContext.RequestContext), routeName); } var htmlAttributesDictionary = RouteValueDictionaryExtensions.Convert(htmlAttributes); if (isCurrentRequest && string.IsNullOrEmpty(surroundUsing)) { if (htmlAttributesDictionary.ContainsKey("class")) { htmlAttributesDictionary["class"] += string.Concat(" ", activeClassName); } else { htmlAttributesDictionary.Add("class", activeClassName); } } var link = htmlHelper.RouteLink(linkText, routeName, RouteValueDictionaryExtensions.Convert(routeValues), htmlAttributesDictionary); if (string.IsNullOrEmpty(surroundUsing)) { return(link); } var tag = new TagBuilder(surroundUsing); tag.MergeAttributes(RouteValueDictionaryExtensions.Convert(surrounderAttributes)); if (isCurrentRequest) { tag.AppendAttribute("class", activeClassName); } tag.InnerHtml = link.ToHtmlString(); if (innerHtml != null) { tag.InnerHtml += innerHtml; } return(new MvcHtmlString(tag.ToString(TagRenderMode.Normal))); }
private MvcHtmlString TextAreaHelper(ModelMetadata modelMetadata, string name, IDictionary <string, object> rowsAndColumns, object htmlAttributes, string expressionTypeName = null) { var templateInfo = _htmlHelper.ViewContext.ViewData.TemplateInfo; if (!string.IsNullOrEmpty(expressionTypeName)) { templateInfo.HtmlFieldPrefix = expressionTypeName; } var fullName = templateInfo.GetFullHtmlFieldName(name); var textAreaTag = new TagBuilder("textarea"); textAreaTag.MergeAttribute("id", Sanitizer.Slug(fullName)); textAreaTag.MergeAttributes(RouteValueDictionaryExtensions.Convert(htmlAttributes), true); textAreaTag.MergeAttributes(rowsAndColumns, rowsAndColumns != null); textAreaTag.MergeAttribute("name", fullName, true); ModelState modelState; _htmlHelper.ViewData.ModelState.TryGetValue(fullName, out modelState); var unobtrusiveValidationAttributes = _htmlHelper.GetUnobtrusiveValidationAttributes(name); textAreaTag.MergeAttributes(unobtrusiveValidationAttributes); string value; if (modelState != null && modelState.Value != null) { value = modelState.Value.AttemptedValue; } else if (modelMetadata.Model != null) { value = modelMetadata.Model.ToString(); } else { value = string.Empty; } textAreaTag.SetInnerText(value); return(textAreaTag.ToMvcHtmlString(TagRenderMode.Normal)); }
private MvcHtmlString RadioButtonHelper(ModelMetadata modelMetadata, object model, string name, object value, bool?isChecked, object htmlAttributes, string expressionTypeName = null) { if (value == null) { throw new ArgumentNullException("value"); } var attributes = RouteValueDictionaryExtensions.Convert(htmlAttributes); var explicitValue = isChecked.HasValue; if (explicitValue) { attributes.Remove("checked"); } else { var valueString = Convert.ToString(value, CultureInfo.CurrentCulture); isChecked = model != null && !string.IsNullOrEmpty(name) && string.Equals(model.ToString(), valueString, StringComparison.OrdinalIgnoreCase); } return(InputHelper(InputType.Radio, modelMetadata, name, value, false, isChecked ?? false, true, true, htmlAttributes, expressionTypeName)); }
public MvcHtmlString TextAreaFor <TProperty>(Expression <Func <TModel, TProperty> > expression, int rows = 2, int columns = 20, object htmlAttributes = null, string expressionTypeName = null) { if (expression == null) { throw new ArgumentNullException("expression"); } var modelMetadata = ModelMetadata.FromLambdaExpression(expression, _htmlHelper.ViewData); var expressionText = GetExpressionText(expression); if (string.IsNullOrEmpty(expressionTypeName)) { expressionTypeName = GetExpressionTypeName(expression); } var placeholder = HintsText(modelMetadata); var attributes = RouteValueDictionaryExtensions.Convert(htmlAttributes); attributes.Add("placeholder", placeholder); Func <MvcHtmlString> textAreaGenerator = () => TextAreaHelper(modelMetadata, expressionText, GetRowsAndColumnsDictionary(rows, columns), attributes, expressionTypeName); return(ControlHelper(expression, textAreaGenerator, expressionTypeName)); }
public RouteHandleErrorAttribute(string routeName, object routeValues) { _routeName = routeName; _routeValues = RouteValueDictionaryExtensions.Convert(routeValues); }
public static MvcHtmlString AjaxPager(this HtmlHelper htmlHelper, int totalPageCount, int pageIndex, int pageSize, int totalItemCount, string actionName, string controllerName, string routeName, PagerOptions pagerOptions, object routeValues, AjaxOptions ajaxOptions, object htmlAttributes) { if (pagerOptions == null) { pagerOptions = new PagerOptions(htmlHelper); } var pagerBuilder = new PagerBuilder(htmlHelper, actionName, controllerName, totalPageCount, pageIndex, pageSize, totalItemCount, pagerOptions, routeName, RouteValueDictionaryExtensions.Convert(routeValues), ajaxOptions, RouteValueDictionaryExtensions.Convert(htmlAttributes)); return(pagerBuilder.RenderPager()); }
private MvcHtmlString SelectInternal(ModelMetadata modelMetadata, string optionLabel, string name, IEnumerable <SelectListItem> selectList, bool allowMultiple, object htmlAttributes, string expressionTypeName = null) { var templateInfo = _htmlHelper.ViewContext.ViewData.TemplateInfo; if (!string.IsNullOrEmpty(expressionTypeName)) { templateInfo.HtmlFieldPrefix = expressionTypeName; } var fullName = templateInfo.GetFullHtmlFieldName(name); var usedViewData = false; if (selectList == null) { selectList = GetSelectData(fullName); usedViewData = true; } var defaultValue = allowMultiple ? GetModelStateValue(fullName, typeof(string[])) : GetModelStateValue(fullName, typeof(string)); if (!usedViewData) { if (defaultValue == null) { defaultValue = _htmlHelper.ViewData.Eval(fullName); } } if (defaultValue != null) { var defaultValues = allowMultiple ? defaultValue as IEnumerable : new[] { defaultValue }; var values = from object value in defaultValues select Convert.ToString(value, CultureInfo.CurrentCulture); var selectedValues = new HashSet <string>(values, StringComparer.OrdinalIgnoreCase); var newSelectList = new List <SelectListItem>(); if (selectList != null) { foreach (var selectListItem in selectList) { selectListItem.Selected = selectListItem.Value != null?selectedValues.Contains(selectListItem.Value) : selectedValues.Contains(selectListItem.Text); newSelectList.Add(selectListItem); } } selectList = newSelectList; } var listItemBuilder = new StringBuilder(); if (optionLabel != null) { listItemBuilder.AppendLine(ListItemToOption(new SelectListItem { Text = optionLabel, Value = string.Empty, Selected = false })); } if (selectList != null) { foreach (var item in selectList) { listItemBuilder.AppendLine(ListItemToOption(item)); } } var tagBuilder = new TagBuilder("select") { InnerHtml = listItemBuilder.ToString() }; tagBuilder.MergeAttributes(RouteValueDictionaryExtensions.Convert(htmlAttributes)); tagBuilder.MergeAttribute("name", fullName, true); tagBuilder.MergeAttribute("id", Sanitizer.Slug(fullName)); if (allowMultiple) { tagBuilder.MergeAttribute("multiple", "multiple"); } ModelState modelState; _htmlHelper.ViewData.ModelState.TryGetValue(fullName, out modelState); var unobtrusiveValidationAttributes = _htmlHelper.GetUnobtrusiveValidationAttributes(name, modelMetadata); tagBuilder.MergeAttributes(unobtrusiveValidationAttributes); return(tagBuilder.ToMvcHtmlString(TagRenderMode.Normal)); }
public MvcHtmlString ValidationSummary(bool excludePropertyErrors, string message, object htmlAttributes) { var formContext = _htmlHelper.ViewContext.FormContext; if (_htmlHelper.ViewData.ModelState.IsValid) { if (formContext == null) { return(null); } if (_htmlHelper.ViewContext.UnobtrusiveJavaScriptEnabled && excludePropertyErrors) { return(null); } } const string closeButton = "<a class=\"close\" href=\"#\">×</a>"; string messageP; if (!string.IsNullOrEmpty(message)) { var pTag = new TagBuilder("p"); pTag.SetInnerText(message); messageP = pTag.ToString(TagRenderMode.Normal); } else { messageP = null; } var htmlSummary = new StringBuilder(); var unorderedList = new TagBuilder("ul"); IEnumerable <ModelState> modelStates = null; if (excludePropertyErrors) { ModelState modelState; _htmlHelper.ViewData.ModelState.TryGetValue(_htmlHelper.ViewData.TemplateInfo.HtmlFieldPrefix, out modelState); if (modelState != null) { modelStates = new[] { modelState } } ; } else { modelStates = _htmlHelper.ViewData.ModelState.Values; } if (modelStates != null) { foreach (var modelState in modelStates) { foreach (var modelError in modelState.Errors) { var errorText = GetUserErrorMessageOrDefault(_htmlHelper.ViewContext.HttpContext, modelError, null); if (!string.IsNullOrEmpty(errorText)) { var liTag = new TagBuilder("li"); liTag.SetInnerText(errorText); htmlSummary.AppendLine(liTag.ToString(TagRenderMode.Normal)); } } } } else if (string.IsNullOrEmpty(messageP)) { return(null); } unorderedList.InnerHtml = htmlSummary.ToString(); var divBuilder = new TagBuilder("div"); divBuilder.MergeAttributes(RouteValueDictionaryExtensions.Convert(htmlAttributes)); divBuilder.AddCssClass("alert-message block-message"); divBuilder.AddCssClass(_htmlHelper.ViewData.ModelState.IsValid ? "success" : "error"); divBuilder.InnerHtml = string.Concat(closeButton, messageP, unorderedList.ToString(TagRenderMode.Normal)); if (formContext != null) { if (_htmlHelper.ViewContext.UnobtrusiveJavaScriptEnabled) { if (!excludePropertyErrors) { divBuilder.MergeAttribute("data-valmsg-summary", "true"); } } else { divBuilder.GenerateId("validationSummary"); formContext.ValidationSummaryId = divBuilder.Attributes["id"]; formContext.ReplaceValidationSummary = !excludePropertyErrors; } } return(divBuilder.ToMvcHtmlString(TagRenderMode.Normal)); }
private MvcHtmlString InputHelper(InputType inputType, ModelMetadata modelMetadata, string name, object value, bool useViewData, bool isChecked, bool setId, bool isExplicitValue, object htmlAttributes, string expressionTypeName = null) { var templateInfo = _htmlHelper.ViewContext.ViewData.TemplateInfo; if (!string.IsNullOrEmpty(expressionTypeName)) { templateInfo.HtmlFieldPrefix = expressionTypeName; } var fullName = templateInfo.GetFullHtmlFieldName(name); var tagBuilder = new TagBuilder("input"); tagBuilder.MergeAttributes(RouteValueDictionaryExtensions.Convert(htmlAttributes)); tagBuilder.MergeAttribute("type", HtmlHelper.GetInputTypeString(inputType)); tagBuilder.MergeAttribute("name", fullName, true); var valueParameter = Convert.ToString(value, CultureInfo.CurrentCulture); var usedModelState = false; switch (inputType) { case InputType.CheckBox: var modelStateWasChecked = GetModelStateValue(fullName, typeof(bool)) as bool?; if (modelStateWasChecked.HasValue) { isChecked = modelStateWasChecked.Value; usedModelState = true; } goto case InputType.Radio; case InputType.Radio: if (!usedModelState) { var modelStateValue = GetModelStateValue(fullName, typeof(string)) as string; if (modelStateValue != null) { isChecked = string.Equals(modelStateValue, valueParameter, StringComparison.Ordinal); usedModelState = true; } } if (!usedModelState && useViewData) { isChecked = EvalBoolean(fullName); } if (isChecked) { tagBuilder.MergeAttribute("checked", "checked"); } tagBuilder.MergeAttribute("value", valueParameter, isExplicitValue); break; case InputType.Password: if (value != null) { tagBuilder.MergeAttribute("value", valueParameter, isExplicitValue); } break; default: var attemptedValue = (string)GetModelStateValue(fullName, typeof(string)); tagBuilder.MergeAttribute("value", attemptedValue ?? ((useViewData) ? EvalString(fullName) : valueParameter), isExplicitValue); break; } if (setId) { tagBuilder.MergeAttribute("id", Sanitizer.Slug(fullName)); } ModelState modelState; _htmlHelper.ViewData.ModelState.TryGetValue(fullName, out modelState); var unobtrusiveValidationAttributes = _htmlHelper.GetUnobtrusiveValidationAttributes(name, modelMetadata); tagBuilder.MergeAttributes(unobtrusiveValidationAttributes); if (inputType == InputType.CheckBox) { var inputItemBuilder = new StringBuilder(); inputItemBuilder.Append(tagBuilder.ToString(TagRenderMode.SelfClosing)); var hiddenInput = new TagBuilder("input"); hiddenInput.MergeAttribute("type", HtmlHelper.GetInputTypeString(InputType.Hidden)); hiddenInput.MergeAttribute("name", fullName); hiddenInput.MergeAttribute("value", "false"); inputItemBuilder.Append(hiddenInput.ToString(TagRenderMode.SelfClosing)); return(MvcHtmlString.Create(inputItemBuilder.ToString())); } return(tagBuilder.ToMvcHtmlString(TagRenderMode.SelfClosing)); }