2011-04-07 2 views
0

안녕하십니까,asp.net mvc3보기에서 javascript를 어떻게 출력 할 수 있습니까?

내보기에는 javascript 변수가 있습니다. 나는보기가로드 된 후

$.ajax({ 
       type: 'POST', 
       url: 'theme/getskins', 
       data: {}, 
       contentType: 'application/json; charset=utf-8', 
       success: function(data){ 
        skinData = data; 
       } 
     }); 

내 질문에 내가 왜이에 일을하고있다 ....

var skinData = null; 

다음 document.ready에 ...이 일을 계속. 나는 내 자바 스크립트 변수에이 값과 출력 값을 취할 수있는 방법

viewPage.ViewBag.SkinInfo = new JsonResult { Data = SkinManager.GetSkins() }; 

_ViewStart.cshtml

에서이 작업을 수행하기 위해 노력하고있어. 첫 번째 여행에서이 사실을 고객에게 전달하고 싶을 때 다른 요청을 할 필요가 없다고 생각합니다. 모든 조언이나 조언은 물론 높이 평가됩니다. 이 작업을 올바르게 수행하려면 어떻게해야합니까? 나는 이것의 약간 변이를 시도했다 그러나 명백한 것은 작동하지 않는다. 같은 것들 ...

var skinData = @ViewBag.SkinInfo.Data;  

그냥 네임 스페이스를 출력합니다. 이 아이디어를 올바르게 수행하는 방법은 무엇입니까?

+0

을 'SkinManager.GetSkins()'는 .NET 객체, 문자열일까요? –

+0

아니요, 해당 속성이 – Hcabnettek

답변

5

당신이 원하는 것

건배, 샌디에고
가 ~ CK는 .GetSkins() 방법은 JSON 객체로 결과를 변환하는 일부 시리얼 라이저를 사용합니다. 어느보기

var skinData = @Html.Raw(ViewBag.SkinInfo); 
+0

인 .NET DataContract 클래스가 잘못 출력합니다. 따옴표 대신 엔터티 사용 ... var skinData = {" CookieExpiration " : 3650, " 쿠키 이름 " : & etc ... – Hcabnettek

+0

업데이트를 확인하고 @ Html.Raw를 사용하여 자동 인코딩이 없도록하십시오. –

3

에 JavaScriptSerializer에 내장 또는

JavaScriptSerializer serializer = new JavaScriptSerializer(); 
viewPage.ViewBag.SkinInfo = serializer.Serialize(SkinManager.GetSkins()); 

그리고 json.net 여기에 HTML 헬퍼를 사용하여 그 일을하는 방법입니다. 그것은 개체를 json으로 변환하고 javascript 변수에 넣을 것입니다.

Html 헬퍼 확장 방법

public static MvcHtmlString Jsonize(this HtmlHelper helper, string variableName, object obj) 
{ 
    StringBuilder str = new StringBuilder(); 
    str.Append("<script type='text/javascript'>"); 
    str.Append("var "); 
    str.Append(variableName); 
    str.Append("="); 

    if (obj == null) 
     str.Append("null"); 
    else 
     str.Append(JsonHelper.Serialize(obj)); 

    str.Append(";"); 
    str.Append("</script>"); 
    return MvcHtmlString.Create(str.ToString()); 
} 

json으로 시리얼. 이 경우 DataContractJsonSerializer를 사용하고 있습니다. 당신이 일 것을 일단

public class JsonHelper 
{ 
    public static string Serialize(object obj) 
    { 
     string json = null; 
     DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType()); 
     using (MemoryStream ms = new MemoryStream()) 
     { 
      serializer.WriteObject(ms, obj); 
      json = Encoding.Default.GetString(ms.ToArray()); 
     } 
     return json; 
    } 
} 

, 당신은 당신의 개체가 포함 된 자바 스크립트 변수를 만들려면 뷰에서 사용할 수있는이 같은 것을 만들 것

@Html.Jsonize("data", ViewBag.SkinInfo.Data); 

:

<script type='text/javascript'> 
    var data = { your serialized object }; 
</script> 
관련 문제