2014-05-09 4 views
0

net 응용 프로그램 데이터베이스에서 값의 사전을 가져 와서 코드에서 스크립트로 전달합니다. 나는 DictionaryJson는 asp.net에서 전달되고이

public string DictionaryJson 
     { 
      get 
      { 

       //i'm getting dictionary information into Dictionaryinformation then 
       JavaScriptSerializer jSer = new JavaScriptSerializer(); 
       return jSer.Serialize(Dictionaryinformation); 

      } 
     } 

처럼 전달되고이 응용 프로그램이 실행되고 DictionaryJson 값이 때 다음과 같이 볼 수 있습니다 여기에

var dictionary = $.parseJSON('<%=DictionaryJson %>'); 

으로 스크립트에서이 값을 accesing 해요

var dictionary = $.parseJSON('{"Name1":"Description1","Name2":"Description2"}'); 

DictionaryJson에 전달되는 데이터가 이미 구문 분석하지만 난 또 다른 문`

을 사용하고 인출 6,
var data = eval(DictionaryJson); 

내가

var dictionary ='<%=DictionaryJson %>'; 
var data = eval(DictionaryJson); 

후 평가가 누락라는 오류를 던지고 다음 코드 $ .parseJSON를 사용하고 사용하지 않을 경우 ';'

$ .parseJSON을 사용하는 경우 Name1, Name2, Description1, Description2 중 하나에 singlequotes (') 또는 백 슬래시()와 같은 특수 문자가 포함되어 있으면이 문은 오류가 발생합니다. 던지고있는 오류입니다. 나는이 특수 문자의 경우를 해결하고 싶지만 여전히 Name1이 Id/Number와 같을 수도 있기 때문에 텍스트에 그대로 있기를 원한다.

답변

0

나는 보통

이 당신에게 강력한 형식의 제공은 다음과 같이 내가 그들을 사용할 수있는 다음과 같은 방법을

public static MvcHtmlString WriteVariables(this HtmlHelper helper, Dictionary<String, Object> values, Boolean writeVar = true) { 
    var sb = new StringBuilder("<script type=\"text/javascript\">//<![CDATA[\r\n"); 
    var seriazlier = new JavaScriptSerializer(); 
    if (writeVar) 
     sb.Append("var "); 
    for (var i = 0; i < values.Count; i++) { 
     var key = values.Keys.ElementAt(i); 
     sb.Append(key).Append("="); 
     var currentVal = seriazlier.Serialize(values[key]); 
     sb.Append(currentVal).Append(i < values.Count - 1 ? "," : ";"); 
    } 
    sb.Append("//]]></script>"); 
    return MvcHtmlString.Create(sb.ToString()); 
} 

를 사용하여 자바 스크립트에서

@WriteVariable(new Dictionary<String, Object>{ 
    {"MyVar", "SomeStr"}, 
    { 
     "ComplexObject", new { 
      Property = true 
     } 
    } 
}); 

를 다음과 같이 사용 C# < => JavaScript 전송을 제어하십시오.

현재 저는 Razor를 사용하고 있지만 ASPX보기 엔진에 완전히 적용 할 수 있습니다.