2010-12-19 7 views
0

내 MVC 목록보기에서 데이터 목록을 표시하기 위해 jQuery 템플릿 플러그인을 사용하려고하는 시나리오가 있습니다. 그러나 내 목록 내 mvc 응용 프로그램의 기본보기입니다. 나는 동일한 작업을 사용하여 json 데이터를 반환하고보기를 반환하는 두 가지 목적으로 서버를 사용하고자합니다.Json 데이터를 반환하는 ASP.Net MVC 목록 작업

데이터를 가져 오는 데 두 번 트립하고 있습니다. 내 작업이 호출 되 자마자 Json 데이터를 반환하고 템플릿 플러그인을 사용하여 데이터를 표시하는 방법이 있습니까? 물론

public ActionResult Index() 
{ 
    var model = FetchModel(); 
    if (Request.IsAjaxRequest()) 
    { 
     return Json(model, JsonRequestBehavior.AllowGet); 
    } 
    return View(model); 
} 

if이 컨트롤러 액션 못생긴합니다 :

답변

2

당신은 액션이 AJAX 호출 된 경우 다음 JSON 데이터를 반환하고 일반보기를 반환하지 않을 경우 테스트 할 수 있습니다. 다음

public class MyFilterAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     base.OnActionExecuted(filterContext); 
     if (filterContext.HttpContext.Request.IsAjaxRequest()) 
     { 
      var viewResult = filterContext.Result as ViewResultBase; 
      if (viewResult != null) 
      { 
       if (viewResult.Model != null) 
       { 
        filterContext.Result = new JsonResult 
        { 
         Data = viewResult.Model, 
         JsonRequestBehavior = JsonRequestBehavior.AllowGet 
        }; 
       } 
      } 
     } 
    } 
} 

그리고이 속성에 컨트롤러를 장식 :

[MyFilter] 
public ActionResult Index() 
{ 
    var model = FetchModel(); 
    return View(model); 
} 
+0

감사 같은 것을 볼에

는 그런 다음 toJson HTML 도우미 확장 예컨대

public static class MvcViewExtensions { public static string toJson(this System.Web.Mvc.HtmlHelper helper, object obj) { JavaScriptSerializer serializer = new JavaScriptSerializer(); return serializer.Serialize(obj); } } 

을 만듭니다. 그러나이 경우에도 서버에 대한 2 회의 왕복은 피하고 싶습니다. Json 데이터를 List 액션을 통해 반환하고 템플릿 플러그인을 통해 표시하려고합니다. 어떤 도움이 필요합니까? – Ashish

1

Darins 좋은 답변에 대한 귀하의 의견은 날 리드는 여러 작업에서이 논리를 반복하지 않도록하기위한 조치 필터를 사용하는 것이 훨씬 더 나은 것 당신의 질문이 정말로 설명하지 못하는 다음이 필요하다고 믿습니다. 당신은 또한 HTML보기를 반환 할 수 있지만

나는 다음이 내 도움을 내 전선을 교차하지 않은 경우

은 ... JSON 객체를 포함하는 스크립트 태그를 포함한다. 당신이 응답이

<html> 

    ...other html stuff 

    <script> 

     var json = <%= Html.ToJson(Model.someProperty) %>; 
     //call to some js to do your templating 
     myapp.someTemplatingFunc(json); 

    </script> 
</html> 
+0

Razor 구문을 사용하여 위 코드와 동일한 오류가 발생했습니다. 나는 다음과 같이 시도하고있다 : var json = @ Model.ToJson(); – Ashish

+0

잘 '실패'는별로 유용하지 않습니다 - 당신은 더 많은 정보를 얻었습니까? 모델에 ToJson 방법이 있습니까? – redsquare

+0

아니요. 위에서 언급 한 ToJson에 대한 별도의 정적 클래스가 있습니다. 그러나 컴파일러가 @ Model.ToJson()을 호출하자마자 오류가 발생합니다. "System.Collections.Generic.List 에는 'ToJson'에 대한 정의가 없습니다. – Ashish

관련 문제