2011-10-05 6 views
2

아약스 요청 인 경우 부분 뷰의 끝 부분에 javascript를 추가하는 메소드가 있습니다. 그러나 내 문제는 스크립트가 반환 될 때 스크립트 태그가 제거되고 실행하려는 함수가 일반 텍스트로 작성된다는 것입니다.MVC3 면도기는 HtmlString에서 스크립트 태그를 제거합니다.

if (httpContext.Request.IsAjaxRequest()) 
     { 
      script = "MyNamespace.globals.initFunctions.push(function() { " + script + " });"; 
      return new HtmlString(@"<script type=""text/javascript"">" + script + "</script>"); 
     } 

그래서, 대신

<script type="text/javascript">MyNamespace.globals.initFunctions.push(function() { MyNamespace.init(); });</script> 

의 원하는 결과를 얻는 나는 일반 텍스트로 MyNamespace.globals.initFunctions.push(function() { MyNamespace.init(); });를 얻을.

어떤 이유가있을 수 있습니까?

편집 : Html.Raw 그것을 시도

() 도움이되지 않았다. 스크립트 문자열에는 스크립트 태그가 포함되어 있지만 렌더링시 제거됩니다.

@{ 
    string script = ViewUtilities.AddScript("MyNamespace.init();", this.ViewContext.HttpContext); 
} 

    @Html.Raw(script); 

편집 2 :

이제

나는이 같은 관점에서 모든 것을 쓰기 시도했습니다,

<script type="text/javascript"> 
    MyNamespace.globals.initFunctions.push(function() { MyNamespace.init(); }); 
</script> 

하고 여전히 스크립트 주위의 태그를 제거하고로 렌더링 일반 텍스트. 여기에서 어디로 가야할지 모르겠다 ...

Firebug로 응답을 테스트 할 때 잘 보이지만 html로 보지 않는다.

+0

혹시이 알아낼 했습니까? 내 스크립트 태그가 제거 된 일반보기에서 똑같은 것을 얻고 있습니다 – Jacques

답변

1

당신은 내가 당신도 아마 반환 MvcHtmlString.Create(fullscript)을 반환 할 생각 @Html.Raw(whatever function you call)

를 사용하려면;

+0

차이를 만들지 않았습니다. 반환 된 문자열은 어떻게 든 스크립트 태그를 제거합니다. –

2

HTML이 인코딩되는 중 ASP.NET MVC에서 자동으로 발생합니다.

@Html.Raw("htmlstring")을 사용하면 태그를 제거하지 않고 문자열의 원시 HTML 값을 제공해야합니다.

+0

내 질문에이 문제를 업데이트했습니다. 슬프게도 작동하지 않았습니다. –

+1

다른 일이 있어야합니다. Html.Raw가 답입니다. 이것을 페이지에 붙여 넣으십시오. 작동합니까? 여기에서 작동합니다. @@ var someScript = ""; } @ Html.Raw (someScript) ' –

0

이것을 HtmlHelper 메서드로 변환하면 작동합니다.

public static class ViewUtilities 
{ 
    public static MvcHtmlString AddScript(this HtmlHelper htmlHelper, string script) 
    { 
     if (htmlHelper.ViewContext.HttpContext.Request.IsAjaxRequest()) 
      return new MvcHtmlString(@"<script type=""text/javascript"">" + script + "</script>"); 
     return new MvcHtmlString(""); 
    } 
} 

을 그 다음 Views 폴더에 web.config 파일에, (어떤 지역에서 어떤 조회수 폴더)에 <pages pageBaseType="System.Web.Mvc.WebViewPage"> 요소하여 namespaces 목록에 다음을 추가 : 다음과 같이 ViewUtilities 클래스를 변경

<add namespace="{namespace where ViewUtilities class is located}"/> 

마지막으로,보기 :

@Html.AddScript("MyNamespace.init();") 
+0

HtmlHelper 아이디어에 감사드립니다. 나는 그것을 시도했지만 여전히 변화가 없다. 이 일을하게 만드는 코드가 아니라 뭔가가 있다고 느끼기 시작했습니다. 그것이 무엇 일 수 있는지 전혀 생각하지 마라. –

관련 문제