2012-12-01 2 views
1

나는 내부의보기를 제시 할 수있는 API 구축하려는 :MVC3 - 허용보기는 HTML로 렌더링하거나 JS

  1. Iframe에 (일반보기).
  2. 또는 JS (document.write)로.

개발자는 Iframe을 사용하고 스크립트를 사용할 때가 있습니다.

//will render document.write('<div>I am a div</div>'); 
<script src="/page/mysqldata?mod=js"></script> 

당신이 그것을 설정하는 방법에 대한 자습서를 아십니까 내가 JS

로 HTML을 얻고 싶은

//will render <html><body><div>I am a div</div></body></html> 
<iframe src="/page/mysqldata?mod=iframe"></iframe> 

한 시간 :

그래서 한 번 당신은 iframe이를 호출 할 수 있습니다?
안녕하십니까, 내 의견은 및 @Html.Partial으로 전화가 많이 걸려 복잡합니다.

결론은 HTML과 iframe 및 스크립트를 html로 제공하고 싶지만 하나의보기 만 유지하려고합니다.

감사

+0

스크립트와 HTML을 검색 할 수 AJAX를 사용할 수 있습니다. 스크립트 대 iframe으로 정확히 무엇을 하려는지 또는 어떤 케이스를 사용할 지 결정하는 것은 명확하지 않습니다. AJAX가 대답 일 가능성이 높습니다 – charlietfl

+0

컨트롤러에서 2 가지 다른 작업으로 노출하려고 했습니까? 액션에서 jsonresult를 반환하면 다른 사람이 viewresult를 반환합니다. – Ikaso

+0

@Ikaso - 감사합니다.하지만 html 뷰를 json으로 렌더링하려면 어떻게해야합니까? 예를 게시 할 수 있습니까? this :'return Json (View (viewModel), JsonRequestBehavior.AllowGet);'작동하지 않습니다 ... – SexyMF

답변

0

은 무엇 당신이 할 수있는 것은 당신이 컨트롤러 내부에 직접 문자열로 뷰를 렌더링 할 수있는 this SO answer에서 RenderPartialViewToString()의 알렉스의 구현을 가지고있다.

보기 및 부분을 만들 수 있습니다. Partial은 모든 컨텐트를 모델에 바인딩하고, 뷰는 <html><body> ... 등을 추가 할 수 있습니다. Razor를 사용하여 모든 뷰를 만들고 원하는대로 복잡하게 만들면 일반 뷰일뿐입니다.

이제 컨트롤러 두 가지 작업이 있어야합니다

  1. 은 iframe에서 HTML 콘텐츠를 들어 : 그냥보기를 렌더링, 그래서 JS의 콘텐츠에 대한 일반 MVC 액션
  2. 입니다 : 대신의, RenderPartialViewToString 전화 HTML을 출력하면, 이렇게 :

    public JavaScriptResult AsJavascript() 
    { 
        var theModel = //create the model 
        var content = // call to RenderPartialViewToString(this, "PartialViewName", theModel); 
        var script = String.Format("document.write('{0}')", 
          content.Replace("'", "\'").Replace(Environment.NewLine, "")); 
        return this.JavaScript(script); 
    } 
    

내가 과거에 비슷한 일을 했어, 그러나 나는을 사용 직접 문서를 쓰는 대신을 작성했기 때문에 코드는 DIV을 만들고 내용을 div.html(content)으로 설정 한 다음 div를 페이지 본문에 추가하여 조금 더 깔끔했습니다. 그러나 결과는 궁극적으로 동일해야합니다.

0

나는 내가 여기에 뭔가를 놓치고 있지 않다 희망하지만, 컨트롤러의 동작은 다음과 같아야합니다

public ActionResult MySqlData(string mod) 
{ 
    if (string.Compare("js", mod, StringComparison.OrdinalIgnoreCase) == 0) 
     return JavaScript("path_to_the_script"); 
    else if (string.Compare("iframe", mod, StringComparison.OrdinalIgnoreCase) == 0) 
     return View("your_view_details_here"); 
    return HttpNotFound("explain why this action failed"); 
} 
관련 문제