2012-11-07 3 views
0

그래서 나는 문자열을 사용하고 JsonResult 반환하는 컨트롤러 액션있어 :ControllerAction의 JsonResult를 ViewModel에 AJAX가없는 문자열로 가져 오는 방법은 무엇입니까?

public JsonResult GetMemberJSON(string memberNumber) 
{ 
     var t = new { foo = memberNumber }; // does more crap, greatly simplified here.... 
     return Json(t, JsonRequestBehavior.AllowGet); 
} 

을 그리고 난 '인쇄'에 원하는 JSON 직접보기의 HTML에 그래서 그 뷰에서 실행되는 자바 스크립트 pageload에서 JSON을 볼 수 있습니다. 이 JSON에서 Ajax를 사용하고 싶지는 않다. 코드에서 JSON을 잡아서는 안된다고 말할 수있는 이유가 없다. 이 JSON을 보유 할 필요가

내 뷰 모델은 다음과 같습니다 자바 스크립트 코드가로 JSON 문자열을 처리 할

public class MakePaymentViewModel : IValidatableObject 
{ 
    public MyClassBlah Blah { get; set; } 
    public string MemberJSONInfo { get; set } 

    public void LoadThings(string memberNumber) 
    { 
     this.Blah = MyClassBlah.Get(memberNumber); 
     this.MemberJSONInfo = ""; // what goes here??? 
    } 
} 

그리고 내보기 :

<div> 
    <script> 
     $(document).ready(function() { 
      var json = @(new HtmlString(Model.MemberPACJSONInfo)); // mixing JS and Razor here.... 
      Library.PaymentDetailManager.BlockPACFieldsAsNeeded(json); 
     }); 
    </script> 
</div> 

나는이를 얻을 수 있다는 사실을 알고 Controller 액션이 JsonResult 대신 String을 반환하면 작동하지만 나에게 잘못된 느낌이 들게됩니다. 내가 (할 말 못하는 것)을 System.Web.Script.Serialization.JavaScriptSerializer()를 통해 JsonResult를 실행하는 경우 또한, 나는 유효한 JSON을 얻을 수 있지만, 다음과 같습니다

// viewmodel 
var cont = new MembershipCenter.Controllers.MembershipController(); 
var oSerializer = new System.Web.Script.Serialization.JavaScriptSerializer(); 
var jsonResult = cont.GetMemberJSON(this.Member.Id); 
this.MemberPACJSONInfo = oSerializer.Serialize(jsonResult); 

// here's how it renders in the View 
{"ContentEncoding":null,"ContentType":null,"Data":{"foo":"990006"},"JsonRequestBehavior":0} 

최고의 위인가 내가 물어볼 수 있니? 나는 그것이 작동하지만, 왜 JsonResult에서 ToString()을 호출하는 것이 JSON을 출력하지 않는지 궁금하다. ToString()가 JsonResult 중 하나에서 재정의되지 않기 때문에

답변

0

당신은 JSON을 저장하고 JSONResult 대신 ActionResult를 사용하여 작동하지 않습니다) (보기에

+0

나는 ViewData에 열중하지 않지만 ViewData에 ActionResult를 넣은 다음 화면에서 호출하면 화면에 "System.Web.Mvc.JsonResult"가 렌더링됩니다. View에서 Execute()로 어떻게 가져올 수 있습니까? – Graham

+0

내가 말한 것은 컨트롤러에서 할 수 있다는 것입니다. var oSerializer = new ystem.Web.Script.Serialization.JavaScriptSerializer(); var jsonResult = cont.GetMemberJSON (this.Member.Id); ViewData [ "JSONData"] = oSerializer.Serialize (jsonResult); 돌아 가기 View(); – msancho

0

호출 ToString을이을 ViewData를 사용하도록을 ViewData 사전을 사용할 수 있습니다 또는 ActionResult입니다. ActionResults는 ExecuteResult()가 호출 될 때 http 응답에 직접 작성하여 작동합니다.

다음은 JsonResult.ExecuteResult()의 스 니펫입니다. 동일한 코드를 사용하여 "t"를 MemberJSONInfo로 직렬화 할 수 있습니다. 전체 JsonResult를 직렬화하려고 시도하지 마십시오.

if (Data != null) { 
    JavaScriptSerializer serializer = new JavaScriptSerializer(); 
    response.Write(serializer.Serialize(Data)); 
    } 
+0

이것은 내가하고있는 일종의 것으로, 그 객체를 ViewModel의 문자열 멤버로 직렬화합니다. View에서 JSON을 출력하려면 'JsonResult'를 사용하여 아무것도 수행하지 않아도됩니다. – Graham

+0

JsonResult로 아무 것도하지 않아도됩니다. 사용하지 마십시오. 난 그저 뒤에서 무슨 일이 벌어지고 있는지 보여주기 위해 그걸 사용했다. 제공된 모델로 ViewResult를 반환 할 수 있습니다. 원하는 JSON 시리얼 라이저 (위의 예에서는 기본 MVC3 시리얼 라이저 사용)를 사용하여 "t"를 직렬화하면됩니다. – barry

0

var t = new { foo = memberNumber }; 코드를 종속성에 다시 추가 할 수있는 경우 여러 컨트롤러에서 사용할 수 있습니다.

저는 컨트롤러를 인스턴스화하고 그 방법을 사용한다고 생각하지 않습니다.

관련 문제