여러 MvcHtmlString 인스턴스를 연결하는 방법
MSDN 에서 약간의 정보로 인해 MvcHtmlString 인스턴스를 연결하는 방법에 대해 약간의 의구심이 있습니다 .
MvcHtmlString 클래스 는 다시 인코딩되는 안되는 HTML 인코딩을 나타냅니다.
다음과 같은 코드를 사용할 때 노드가 두 번 HTML 인코딩 위험이 있습니까?
var label = Html.LabelFor(model => model.Email);
var textbox = Html.TextBoxFor(model => model.Email);
var validation = Html.ValidationMessageFor(model => model.Email);
var result = MvcHtmlString.Create(
label.ToString() + textbox.ToString() + validation.ToString());
(참고 : 뷰에서 코드를 사용을 위해 HtmlHelper 확장 메소드로 이동해야합니다.)
귀하의 코드가 있습니다.
MSDN의 코드 조각은 인코딩보기 엔진 (예 : 사용시 .NET 4의 Aspx보기 엔진 <%: %>
또는 MVC 3의 Razor보기 엔진)이 개체의 높은 값을 다시 인코딩하지 함을 의미합니다.
예를 들면 다음과 같습니다.
string s = "<tag>";
var hs = MvcHtmlString.Create(s);
<%: s %> -- outputs "<tag>"
<%: hs %> -- outputs "<tag>"
너무 나쁜 C #은 여기서 + 연산자를 재정의 할 수 없습니다! 대신 확장 방법을 사용하는 것은 무엇입니까?
public static MvcHtmlString Concat(this MvcHtmlString first, params MvcHtmlString[] strings)
{
return MvcHtmlString.Create(first.ToString() + string.Concat(strings.Select(s => s.ToString())));
}
이것은 아마도 최적화 될 수 있습니다. 그것은 증명하는 것이 매우 간단합니다.
사용 샘플 :
label.Concat(textbox, validation)
이제 내 블로그를위한 뻔뻔한 플러그 : TagBuilder 또는 HtmlTags를 사용하여 HTML 정리
이 접근 방식을 사용했습니다.
private static MvcHtmlString Concat(params MvcHtmlString[] items)
{
var sb = new StringBuilder();
foreach (var item in items.Where(i => i != null))
sb.Append(item.ToHtmlString());
return MvcHtmlString.Create(sb.ToString());
}
HtmlHelper의 확장 메서드와 함께 클래스 내에서 사용하는 유틸리티 메서드입니다.
나는 또 다른 방법은 메타 데이터를 사용하는 것입니다.
public static String Concat(params object[] args);
기본적으로 ToStrings는 전달 된 각 개체를 전달한 다음 결과를 연결하고 전달을 반환합니다.
따라서 최종 결과는 다음과 가변적입니다.
var result = MvcHtmlString.Create(
string.Concat(
label, textbox, validation
)
);
참고 URL : https://stackoverflow.com/questions/3460762/how-to-concatenate-several-mvchtmlstring-instances
'ProgramingTip' 카테고리의 다른 글
C #에 변경 불가능한 사전을 제공하는 방법이 있습니까? (0) | 2020.11.08 |
---|---|
UUID를 base64로 저장 (0) | 2020.11.08 |
src와 ImageView의 배경의 차이점은 무엇입니까 (0) | 2020.11.08 |
css 속성 값의! 기본값은 무엇을 의미합니까? (0) | 2020.11.08 |
Firefox 리더보기는 어떻게 작동합니까? (0) | 2020.11.08 |