MVC 프로젝트의 JavaScript 내부의 서버 태그에 액세스합니다
-
18-09-2019 - |
문제
JavaScript 함수 내에서 일부 서버 태그를 사용하고 싶습니다.
<%=Model.HtmlProperty%>
과거에는이 값이 숨겨진 입력 필드에 저장했지만 속성에 HTML이 포함되어 있으면 따옴표와 같은 특수 문자에 문제가 있습니다. 특수 문자 문제를 피하기 위해 컨트롤러를 인코딩하고 디코딩하지 않아도됩니다.
Rick Strahl이 있습니다 커플 게시물 웹 양식 프로젝트 의이 문제에 대해서는 MVC 프로젝트를위한 우아한 솔루션을 찾고 있습니다.
업데이트: Robert Harvey의 답변은 HTML을 인코딩하는 것을 제안합니다. 다시, 그 내가하고 싶은 일이 아닙니다. 궁극적으로 HTML 스크립트를 fckeditor 인스턴스에 주입하려고합니다. 이것은 JavaScript로 수행해야합니다. 나는 가치에 액세스하는 방법을 알아 내려고 노력하고 있습니다. <%=Model.HtmlProperty%>
인코딩 된 텍스트를 숨겨진 입력 요소에 저장하지 않고 JavaScript 내부.
해결책 2
JavaScript 내부에 서버 태그를 사용하는 것은 불가능한 것 같습니다. 나는 숨겨진 입력 요소 안에 문자열을 저장했으며, Queen3의 의견에 따라, 내가 함께했던 일을 계속해야 할 것 같습니다. 귀하의 의견에 감사드립니다.
다른 팁
Rick Strahl의 게시물에서 차용하고 호출 서명을 약간 변경하면 JavaScript 문자열을 인코딩하는 기능 (HTML 클래스의 확장 메소드로 변경 한 후)은 다음과 같습니다.
public static string EncodeJsString(this HtmlHelper h, string s)
{
StringBuilder sb = new StringBuilder();
sb.Append("\"");
foreach (char c in s)
{
switch (c)
{
case '\"':
sb.Append("\\\"");
break;
case '\\':
sb.Append("\\\\");
break;
case '\b':
sb.Append("\\b");
break;
case '\f':
sb.Append("\\f");
break;
case '\n':
sb.Append("\\n");
break;
case '\r':
sb.Append("\\r");
break;
case '\t':
sb.Append("\\t");
break;
default:
int i = (int)c;
if (i < 32 || i > 127)
{
sb.AppendFormat("\\u{0:X04}", i);
}
else
{
sb.Append(c);
}
break;
}
}
sb.Append("\"");
return sb.ToString();
}
다음과 같이 부를 수 있어야합니다.
<%= Html.EncodeJsString(Model.HtmlProperty) %>
htmlhelper를 사용하여 스크립트를 즉시 작성하십시오 ..
public static string WriteLightboxScript(this HtmlHelper helper, string galleryName)
{
var builder = new TagBuilder("script");
builder.MergeAttribute("type", "text/javascript");
builder.SetInnerText("$(function() {$('a[rel=" + galleryName + "]').lightBox();});");
return builder.ToString(TagRenderMode.Normal);
}