asp.net mvc보기에서 문자열을 html로 표시


98

html 마크 업이 포함 된 문자열을 생성하는 컨트롤러가 있는데 이제 뷰에 표시 할 때 모든 태그가 포함 된 간단한 문자열로 표시됩니다. Html 도우미를 사용하여 인코딩 / 디코딩하여 제대로 표시하려고했지만 작동하지 않습니다.

string str= "<a href="/Home/Profile/seeker">seeker</a> has applied to <a href="/Jobs/Details/9">Job</a> floated by you.</br>";

내 견해로는

@Html.Encode(str)

6
Html.Raw도움이 될 것 같아요 .
Saeed Neamati 2013

또한 HtmlStrin클래스 를 사용할 수 있다고 생각합니다 .HtmlString str = new HtmlString("<span>Some HTML here</span>");
Saeed Neamati

답변:


168

사용하고 싶은 가까이 있습니다. @Html.Raw(str)

@Html.Encode문자열을 취하고 모든 특수 문자가 올바르게 처리되는지 확인합니다. 여기에는 공백과 같은 문자가 포함됩니다.


6
@ Html.Raw 내가 :) 대답에 대한 감사를 검색 정확히 무엇인가
AFract

@Jerad Rose가 언급 한 IHtmlString이 훨씬 낫습니다
Pratyush Dhanuka 2018-08-20

37

IHtmlString대신 다음을 사용해야합니다 .

IHtmlString str = new HtmlString("<a href="/Home/Profile/seeker">seeker</a> has applied to <a href="/Jobs/Details/9">Job</a> floated by you.</br>");

HTML을 유지해야하는 모델 속성이나 변수가있을 때마다 이것이 일반적으로 더 나은 방법이라고 생각합니다. 우선 조금 더 깨끗합니다. 예를 들면 :

@Html.Raw(str)

비교 :

@str

또한 @Html.Raw()데이터가 HTML인지 여부에 대한 우려가 컨트롤러에 유지되기 때문에를 사용하는 것보다 약간 더 안전하다고 생각합니다 . 프런트 엔드 개발자와 백엔드 개발자가있는 환경에서 백엔드 개발자는 어떤 데이터가 HTML 값을 보유 할 수 있는지에 더 잘 적응할 수 있으므로이 문제를 백엔드 (컨트롤러)에 유지합니다.

나는 일반적으로 Html.Raw()가능할 때마다 사용하지 않으려 고 노력 합니다.

주목할 가치가있는 또 다른 한 가지는 당신이 어디에 할당 str하고 있는지 잘 모르겠지만, 이것을 구현하는 방법과 관련하여 저와 관련된 몇 가지 사항입니다.

먼저 솔루션 ( IHtmlString또는 Html.Raw)에 관계없이 컨트롤러에서 수행해야합니다 . 여러분의 관점에서 이와 같은 논리는 실제로 거기에 속하지 않기 때문에 피해야합니다.

또한 ViewModel보기에 값을 가져 오기 위해 를 사용해야합니다 (그리고 다시 이상적 IHtmlString으로는 속성 유형 으로 사용 ). @Html.Encode(str)예제를 단순화하기 위해이 작업을 수행하지 않는 한 이와 같은 것을 보는 것은 약간 문제가됩니다.


1
컨트롤러는 데이터 저장소가 아니라 라우팅 용이라는 점을 지적하고 싶습니다. 또한 백엔드 개발자는 코드의 기존 계약을 변경하는 것보다 더 잘 알고 있어야합니다. UI는 모델에 바인딩되어야하며 모델이 크게 변경되면 단위 테스트가 중단됩니다.
Anthony Mason

답변 해 주셔서 감사합니다. 나는 그것을 좋아한다.
Thomas.Benz

그래,이 대답은 훨씬 더, 나는 처음에 Html.Raw 사용하지만, 나는이 대답을 읽을 때, 나는 즉시 전환
Pratyush Dhanuka을

7

당신이 사용할 수있는 @Html.Raw(str)

자세한 내용은 MSDN 을 참조하십시오.

HTML로 인코딩되지 않은 마크 업을 반환합니다.

이 메서드는 인코딩되지 않은 HTML을 렌더링하는 IHtmlString 클래스를 사용하여 HTML 마크 업을 래핑합니다.


1

MVC의 HTML 입력 필드와 비슷한 문제가 있습니다. 페이지 된 웹은 필드의 첫 번째 키워드 만 표시했습니다. 예 : 입력 필드 : "The quick brown fox"표시된 값 : "The"

해결 방법은 다음과 같이 값 문에서 따옴표로 변수를 넣는 것입니다.

<input class="ParmInput" type="text" id="respondingRangerUnit" name="respondingRangerUnit"
       onchange="validateInteger(this.value)" value="@ViewBag.respondingRangerUnit">

0

최근 에 비슷한 문제가 발생 하여 Google이 저를 여기에 착륙 시켰으므로 다른 사람들도 여기에 착륙 할 경우를 대비하여이 답변을 여기에 넣었습니다.

나는 한 때 것으로 나타났습니다 심하게 HTML 포맷 , 실제로 가졌다 내 모든 html 태그가 밖으로 제거 와 함께, 단지 비 태그 내용이 남아 . 특히 여는 테이블 태그가 누락 된 테이블이 있었고 전체 문자열에서 내 모든 html 태그가 완전히 찢어졌습니다.

따라서 위의 방법이 작동하지 않고 여전히 머리를 긁적 이라면 html 이 유효한지 확인하십시오 .

나는 그것을 작동시킨 후에도 MVC가 내가없는 곳에 tbody 태그를 추가하고 있음을 알았습니다. 이것은 정리가 일어나고 있음을 알려주며 (MVC 5) 불가능할 때 모든 / 일부 태그를 제거합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.