문제

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);
        }

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top