2013-02-26 5 views
4

TagBuilder를 사용하여 JavaScript를 작성하는 메서드에 C# 문자열 배열을 전달하고 있습니다.C# 문자열 배열을 Javascript 배열로 변환

var rss_scr_contents = new Array(); 

      $.each('System.String[]', function (i, objValue) { 
       rss_scr_contents[i] = objValue; 
     }); 

할 수있는 올바른 구문은 무엇 : 이것은 다음과 같은 소스 코드를 초래

public static IHtmlString NewsTicker(this HtmlHelper htmlHelper, string[] arrTickerContents) 
    { 
     TagBuilder script = new TagBuilder("script"); 
     script.Attributes.Add("type", "text/javascript"); 

     script.InnerHtml = @" 

      var rss_scr_contents = new Array(); 

      $.each('" + arrTickerContents + @"', function (i, objValue) { 
       rss_scr_contents[i] = objValue; 
     }); 

     return MvcHtmlString.Create(script.ToString()); 
    } 

: 내 자바 스크립트에서 배열 내 실제 항목에서 얻을 수하지 않는 것 이?

답변

1

문제는 arrTickerCountents.ToString()이 예상 된 결과를 반환하지 않는다는 것입니다.

예를 들어, (new [] {"hello", "world"}).ToString()"System.String[]"으로 평가되며, 여기서는 유용하지 않습니다.

올바른 방법은 적절한 .NET 객체에서 유효한 JavaScript 값을 내보낼 수있는 변환을 사용하는 것입니다. 가장 일반적인 도구는 JSON 변환기 일 가능성이 큽니다. 나는 Json.NET을 좋아하지만 다른 변환기에서도 작동합니다.

var jsonArray = JsonConvert.SerializeObject(arrTickerContents); 
script.InnerHtml = @" 
     var rss_scr_contents = []; 
     $.each(" + jsonArray + @", function (i, objValue) { 
      rss_scr_contents[i] = objValue; 
     }) 
"; // Please make sure to post valid code 

위의 루프는 처리가 이루어지지 않으므로 간단한 대안을 고려하십시오. (I 글로벌 윈도우 속성 var을 사용하지하는 것을 선호합니다.)

script.InnerHtml = @"rss_scr_contents = " + jsonArray + ";"; 

가 나는 그것의 단순성 및 사용 가능한 자동 변환을위한 JSON을 추천, 항상 적용되지 않을 수도있다. 유효하지 않은, 악의적 인 또는 예기치 않은 결과가 나오기 쉽기 때문에 JavaScript 값 (예 : JSON 라이브러리가없는)을 직접 작성해야합니다.

+1

우수 답변! – user517406

0
$.each('[' + string.Join(',', arrTickerContents), + ']', function (i, objValue) { 
+0

-1이 기능이 작동하는 동안 SQL에서 자리 표시자를 사용하지 않는 것이 낫습니다. 이 JS-array에 대한 매뉴얼이 유효한 리터럴을 생성 할 것이라는 보장은 없으며 입력 값이 int []와 같이 제한적이 아니기 때문에 주어진 *에서 * 많은 * (아마도 대부분의) 값을 깨뜨릴 수 있습니다. 입력. "to JSON"을 사용하는 것이 좋습니다. –

+0

@pst, 음 ... 이것은 대답 한 내용입니다. 물론 답답합니다. – gdoron

+0

내 의견을 다시 읽으십시오. 다음은이 코드가 생성 할 수있는 잘못된 출력입니다 :'[1, hello world!, alert ("\ o /")]]'. –

관련 문제