Browse Source

Use TagBuilderExtensions instead of RenderHtml.

pull/5331/head
maliming 6 years ago
parent
commit
7c89603ada
  1. 23
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpTagHelperService.cs
  2. 4
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbItemTagHelperService.cs
  3. 5
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Carousel/AbpCarouselItemTagHelperService.cs
  4. 4
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpAccordionItemTagHelperService.cs
  5. 4
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs
  6. 2
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpRadioInputTagHelperService.cs
  7. 10
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs
  8. 122
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalFooterTagHelperService.cs
  9. 6
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalHeaderTagHelperService.cs
  10. 4
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabDropdownTagHelperService.cs
  11. 8
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabLinkTagHelperService.cs
  12. 8
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabTagHelperService.cs
  13. 10
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabsTagHelperService.cs
  14. 23
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/TagBuilderExtensions.cs

23
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpTagHelperService.cs

@ -1,15 +1,5 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text.Encodings.Web;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Html;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Razor.TagHelpers;
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form;
using Volo.Abp.Threading;
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers
{
@ -52,14 +42,5 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers
Process(context, output);
return Task.CompletedTask;
}
protected virtual string RenderHtml(IHtmlContent content)
{
using (var writer = new StringWriter())
{
content.WriteTo(writer, HtmlEncoder.Default);
return writer.ToString();
}
}
}
}
}

4
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbItemTagHelperService.cs

@ -47,7 +47,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Breadcrumb
var link = new TagBuilder("a");
link.Attributes.Add("href", TagHelper.Href);
link.InnerHtml.Append(TagHelper.Title);
return RenderHtml(link);
return link.ToHtmlString();
}
}
}
}

5
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Carousel/AbpCarouselItemTagHelperService.cs

@ -2,7 +2,6 @@
using Microsoft.AspNetCore.Razor.TagHelpers;
using System.Collections.Generic;
using System.Text.Encodings.Web;
using System.Web;
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers;
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Extensions;
@ -45,7 +44,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Carousel
{
var img = new TagBuilder("img");
img.AddCssClass("d-block w-100");
img.Attributes.Add("src", HttpUtility.HtmlDecode(TagHelper.Src));
img.Attributes.Add("src", TagHelper.Src);
img.Attributes.Add("alt", TagHelper.Alt);
output.Content.SetHtmlContent(img);
@ -81,4 +80,4 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Carousel
}
}
}
}

4
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpAccordionItemTagHelperService.cs

@ -43,7 +43,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Collapse
header.Attributes.Add("id", GetHeadingId());
header.InnerHtml.AppendHtml(h5);
return RenderHtml(header);
return header.ToHtmlString();
}
protected virtual string GetAccordionContentItem(TagHelperContext context, TagHelperOutput output, string content)
@ -61,7 +61,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Collapse
wrapper.Attributes.Add("data-parent", "#" + AbpAccordionParentIdPlaceholder);
wrapper.InnerHtml.AppendHtml(cardBody);
return RenderHtml(wrapper);
return wrapper.ToHtmlString();
}
protected virtual string GetHeadingId()

4
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs

@ -267,7 +267,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form
label.AddCssClass("custom-control-label");
}
return RenderHtml(label);
return label.ToHtmlString();
}
protected virtual string GetRequiredSymbol(TagHelperContext context, TagHelperOutput output)
@ -318,7 +318,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form
small.Attributes.Add("id", idAttr?.Value?.ToString() + "InfoText");
small.AddCssClass("form-text text-muted");
return RenderHtml(small);
return small.ToHtmlString();
}
protected virtual async Task<string> GetLabelAsHtmlUsingTagHelperAsync(TagHelperContext context, TagHelperOutput output, bool isCheckbox)

2
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpRadioInputTagHelperService.cs

@ -81,7 +81,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form
wrapper.InnerHtml.AppendHtml(input);
wrapper.InnerHtml.AppendHtml(label);
html.AppendLine(RenderHtml(wrapper));
html.AppendLine(wrapper.ToHtmlString());
}
return html.ToString();

10
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs

@ -24,9 +24,9 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form
private readonly IStringLocalizerFactory _stringLocalizerFactory;
public AbpSelectTagHelperService(
IHtmlGenerator generator,
HtmlEncoder encoder,
IAbpTagHelperLocalizer tagHelperLocalizer,
IHtmlGenerator generator,
HtmlEncoder encoder,
IAbpTagHelperLocalizer tagHelperLocalizer,
IStringLocalizerFactory stringLocalizerFactory)
{
_generator = generator;
@ -142,7 +142,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form
label.Attributes.Add("for", GetIdAttributeValue(selectTag));
label.InnerHtml.Append(TagHelper.Label);
return RenderHtml(label) + GetRequiredSymbol(context, output);
return label.ToHtmlString() + GetRequiredSymbol(context, output);
}
return await GetLabelAsHtmlUsingTagHelperAsync(context, output) + GetRequiredSymbol(context, output);
@ -205,7 +205,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form
small.Attributes.Add("id", idAttr?.Value?.ToString() + "InfoText");
small.AddCssClass("form-text text-muted");
return RenderHtml(small);
return small.ToHtmlString();
}
protected virtual List<SelectListItem> GetSelectItemsFromEnum(TagHelperContext context, TagHelperOutput output, ModelExplorer explorer)

122
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalFooterTagHelperService.cs

@ -1,63 +1,63 @@
using Localization.Resources.AbpUi;
using Localization.Resources.AbpUi;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.AspNetCore.Razor.TagHelpers;
using Microsoft.Extensions.Localization;
using Microsoft.AspNetCore.Razor.TagHelpers;
using Microsoft.Extensions.Localization;
using System.Text;
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers;
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers;
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal
{
public class AbpModalFooterTagHelperService : AbpTagHelperService<AbpModalFooterTagHelper>
{
private readonly IStringLocalizer<AbpUiResource> _localizer;
public AbpModalFooterTagHelperService(IStringLocalizer<AbpUiResource> localizer)
{
_localizer = localizer;
}
public override void Process(TagHelperContext context, TagHelperOutput output)
{
output.TagName = "div";
output.Attributes.AddClass("modal-footer");
if (TagHelper.Buttons != AbpModalButtons.None)
{
output.PostContent.SetHtmlContent(CreateContent());
}
ProcessButtonsAlignment(output);
{
public class AbpModalFooterTagHelperService : AbpTagHelperService<AbpModalFooterTagHelper>
{
private readonly IStringLocalizer<AbpUiResource> _localizer;
public AbpModalFooterTagHelperService(IStringLocalizer<AbpUiResource> localizer)
{
_localizer = localizer;
}
public override void Process(TagHelperContext context, TagHelperOutput output)
{
output.TagName = "div";
output.Attributes.AddClass("modal-footer");
if (TagHelper.Buttons != AbpModalButtons.None)
{
output.PostContent.SetHtmlContent(CreateContent());
}
ProcessButtonsAlignment(output);
}
protected virtual string CreateContent()
protected virtual string CreateContent()
{
var sb = new StringBuilder();
switch (TagHelper.Buttons)
switch (TagHelper.Buttons)
{
case AbpModalButtons.Cancel:
sb.AppendLine(GetCancelButton());
break;
case AbpModalButtons.Close:
sb.AppendLine(GetCloseButton());
break;
case AbpModalButtons.Save:
sb.AppendLine(GetSaveButton());
break;
case AbpModalButtons.Save | AbpModalButtons.Cancel:
sb.AppendLine(GetSaveButton());
sb.AppendLine(GetCancelButton());
break;
case AbpModalButtons.Save | AbpModalButtons.Close:
sb.AppendLine(GetSaveButton());
sb.AppendLine(GetCloseButton());
case AbpModalButtons.Cancel:
sb.AppendLine(GetCancelButton());
break;
case AbpModalButtons.Close:
sb.AppendLine(GetCloseButton());
break;
case AbpModalButtons.Save:
sb.AppendLine(GetSaveButton());
break;
case AbpModalButtons.Save | AbpModalButtons.Cancel:
sb.AppendLine(GetSaveButton());
sb.AppendLine(GetCancelButton());
break;
case AbpModalButtons.Save | AbpModalButtons.Close:
sb.AppendLine(GetSaveButton());
sb.AppendLine(GetCloseButton());
break;
}
return sb.ToString();
}
protected virtual string GetSaveButton()
}
protected virtual string GetSaveButton()
{
var icon = new TagBuilder("i");
icon.AddCssClass("fa");
@ -74,10 +74,10 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal
element.InnerHtml.AppendHtml(icon);
element.InnerHtml.AppendHtml(span);
return RenderHtml(element);
}
protected virtual string GetCloseButton()
return element.ToHtmlString();
}
protected virtual string GetCloseButton()
{
var element = new TagBuilder("button");
element.Attributes.Add("type", "button");
@ -86,10 +86,10 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal
element.AddCssClass("btn-secondary");
element.InnerHtml.Append(_localizer["Close"]);
return RenderHtml(element);
}
protected virtual string GetCancelButton()
return element.ToHtmlString();
}
protected virtual string GetCancelButton()
{
var element = new TagBuilder("button");
element.Attributes.Add("type", "button");
@ -98,9 +98,9 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal
element.AddCssClass("btn-secondary");
element.InnerHtml.Append(_localizer["Cancel"]);
return RenderHtml(element);
}
return element.ToHtmlString();
}
protected virtual void ProcessButtonsAlignment(TagHelperOutput output)
{
if (TagHelper.ButtonAlignment == ButtonsAlign.Default)
@ -108,6 +108,6 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal
return;
}
output.Attributes.AddClass("justify-content-" + TagHelper.ButtonAlignment.ToString().ToLowerInvariant());
}
}
}
}
}
}

6
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalHeaderTagHelperService.cs

@ -29,7 +29,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal
title.AddCssClass("modal-title");
title.InnerHtml.Append(TagHelper.Title);
return RenderHtml(title);
return title.ToHtmlString();
}
protected virtual string CreatePostContent()
@ -45,7 +45,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal
button.Attributes.Add("aria-label", L["Close"].Value);
button.InnerHtml.AppendHtml(span);
return RenderHtml(button);
return button.ToHtmlString();
}
}
}
}

4
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabDropdownTagHelperService.cs

@ -51,7 +51,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab
listItem.InnerHtml.AppendHtml(anchor);
listItem.InnerHtml.AppendHtml(menu);
return RenderHtml(listItem);
return listItem.ToHtmlString();
}
}
}
}

8
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabLinkTagHelperService.cs

@ -11,7 +11,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab
public override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
SetPlaceholderForNameIfNotProvided();
var tabHeader = GetTabHeaderItem(context, output);
var tabHeaderItems = context.GetValue<List<TabItem>>(TabItems);
@ -37,7 +37,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab
anchor.Attributes.Add("href", href);
anchor.InnerHtml.Append(title);
return RenderHtml(anchor);
return anchor.ToHtmlString();
}
else
{
@ -51,7 +51,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab
listItem.AddCssClass("nav-item");
listItem.InnerHtml.AppendHtml(anchor);
return RenderHtml(listItem);
return listItem.ToHtmlString();
}
}
@ -63,4 +63,4 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab
}
}
}
}
}

8
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabTagHelperService.cs

@ -55,7 +55,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab
anchor.InnerHtml.Append(title);
return RenderHtml(anchor);
return anchor.ToHtmlString();
}
else
{
@ -79,7 +79,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab
listItem.AddCssClass("nav-item");
listItem.InnerHtml.AppendHtml(anchor);
return RenderHtml(listItem);
return listItem.ToHtmlString();
}
}
@ -105,7 +105,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab
wrapper.InnerHtml.AppendHtml(content);
return RenderHtml(wrapper);
return wrapper.ToHtmlString();
}
protected virtual void SetPlaceholderForNameIfNotProvided()
@ -131,4 +131,4 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab
.Select(a=> new TagHelperAttribute(a.Name.Substring(prefix.Length), a.Value)).ToList();
}
}
}
}

10
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabsTagHelperService.cs

@ -44,7 +44,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab
}
}
protected virtual string CombineHeadersAndContents(TagHelperContext context, TagHelperOutput output, string headers, string contents)
{
var combined = new StringBuilder();
@ -76,7 +76,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab
listElement.Attributes.Add("role", "tablist");
listElement.InnerHtml.AppendHtml(headers);
return RenderHtml(listElement);
return listElement.ToHtmlString();
}
protected virtual string SurroundContents(TagHelperContext context, TagHelperOutput output, string contents)
@ -88,7 +88,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab
wrapper.Attributes.Add("id", id);
wrapper.InnerHtml.AppendHtml(contents);
return RenderHtml(wrapper);
return wrapper.ToHtmlString();
}
protected virtual string PlaceInsideColumn(string contents, int columnSize)
@ -97,7 +97,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab
wrapper.AddCssClass("col-md-" + columnSize);
wrapper.InnerHtml.AppendHtml(contents);
return RenderHtml(wrapper);
return wrapper.ToHtmlString();
}
protected virtual void PlaceInsideRow(TagHelperOutput output)
@ -228,4 +228,4 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab
return content.Replace(TabItemNamePlaceHolder, HtmlGenerator.Encode(TagHelper.Name) + "_" + index);
}
}
}
}

23
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/TagBuilderExtensions.cs

@ -0,0 +1,23 @@
using System.IO;
using System.Text.Encodings.Web;
using Microsoft.AspNetCore.Mvc.Rendering;
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers
{
internal static class TagBuilderExtensions
{
public static string ToHtmlString(this TagBuilder tagBuilder)
{
return tagBuilder.ToHtmlString(HtmlEncoder.Default);
}
public static string ToHtmlString(this TagBuilder tagBuilder, HtmlEncoder htmlEncoder)
{
using (var writer = new StringWriter())
{
tagBuilder.WriteTo(writer, htmlEncoder);
return writer.ToString();
}
}
}
}
Loading…
Cancel
Save