2011-04-28 26 views
0

這裏的(使用MVC 2.0)的情況:.NET/jQuery的 - 預覽形式結果/渲染視圖爲字符串

我試圖建立一個功能,讓用戶可以預覽他們做出改變他們的生物/個人資料沒有實際上首先做出改變。用戶填寫表單,點擊「預覽」按鈕,看看他們的變化是什麼樣子。一個難題是前端有一個不同的主頁,所以我們需要渲染整個視圖,而不僅僅是一個控件。

這是我採取的方法:

  1. 非同步發佈連載形式向控制器動作
  2. 操縱模型以充實館藏,等不得到發佈
  3. 的回報前端視圖,將此修改後的模型傳遞給它
  4. 捕捉對異步方法的響應,將其包裝在iframe中並將其寫入頁面上的lightboxed div

代碼我使用...控制器動作(BuildPreview方法只是稍微改變模型)

[HttpPost] 
    [Authorize] 
    public ActionResult PreviewProfile(PersonModel model) 
    { 
     return View("Person", PeopleService.BuildPreview(model));; 
    } 

HTML/jQuery的東西:

<script type="text/javascript"> 
$(document).ready(function() { 

    $("#previewButton").click(function (e) { 
     $.post("/PreviewProfile", $("#bioForm").serialize(), function (response) { 
      $("#previewFrame").html(response); 
      $("#holdMyPreview").modal({ 
           overlayClose: true, 
           escClose: true, 
           autoResize: true, 
          }, "html"); 
     }); 
    }); 
}); 

模態方法只是一個基本的燈箱類型的東西。

運行到兩個問題:

  1. 編輯 - 移除了這個,我卻意外地拉着孩子控制
  2. IFrame不再渲染HTML(也許是因爲B/C它缺少的不是有效的HTML/body/head標籤?)。如果我只是將響應直接放入div中,而沒有iframe,則它會工作... albiet的樣式表錯誤。如果我嘗試將它插入iframe中,它只會將其視爲空白頁面,只是顯示html,head和body標籤。

有什麼想法?

山姆

PS:想這比在MSDN論壇(http://forums.asp.net/t/1675995.aspx/1?Rendering+a+view+into+a+string+),它沒有得到任何地方,我想我會看到如果SO有任何輝煌。

回答

0

,只需按摩響應,當你把它找回來,添加缺少的HTML /體/頭

$.post("/PreviewProfile", $("#bioForm").serialize(), function (response) { 
      response = "<html><body>"+response+"</body></html>"; 
      $("#previewFrame").html(response); 
      $("#holdMyPreview").modal({ 
           overlayClose: true, 
           escClose: true, 
           autoResize: true, 
          }, "html"); 
     });