2014-01-29 21 views
-2

我試圖捕捉當前HTML頁面,並想知道,看我怎麼可以使用剃刀語法獲取當前HTML頁面,並設置一個隱藏字段(MVC4)

提起我想設置

設置hiddenfield
@Html.Hidden("pageHtml") 

我目前使用JavaScript來獲得頁面的HTML,但同樣的事情,我想用@Html屬性或一些嘗試

var html1 = $('#wrapper').html(); 
var encodedString = escape(html1); 
$('#pageHtml').val(encodedString); 

,或者如果有人能幫助我找到一個辦法讓日在控制器活動e當前查看HTML

請提出一些建議

+1

你能提供更多關於你想要做什麼的信息嗎?如果你想從控制器編輯一個元素的值..使它成爲模型屬性並使用'@ Html.HiddenFor(x => x.Property)'... –

+0

我需要頁面的html來創建一個完整的電子郵件附件。問題是我將如何設置模態屬性。 – fireholster

+0

你的問題是非常不清楚的..請編輯它,以更好地解釋你正在努力實現的目標 –

回答

-1

所以這是我們如何做終於......(我們的頁面不包含任何安全數據,因此我們已經走了這一點)

  • 增加了一個隱藏字段來保存HTML
  • 使用javascript方法設置帶有編碼頁面的隱藏字段html html代碼html()='('#wrapper')。html(); var encodedString = escape(html1);

  • 更改了控制器將隱藏字段作爲參數。 (通過編碼的HTML)

  • 未逸出使用HTML

    變種HTML = System.Uri.UnescapeDataString(pageHtml);

4

首先,創建如下一個控制器擴展方法ViewToString
這將延長System.Web.Mvc.Controller有一個新的方法叫做ViewToString它會使你的意見HTML成StringReader

namespace YourProject.ControllerExtensions 
{ 
    using System; 
    using System.IO; 
    using System.Web.Mvc; 
    public static class ControllerExtend 
    { 
     public static StringReader ViewToString(this Controller controller, string viewName, object model) 
     { 
      #region MyRegion 
      ControllerContext context = controller.ControllerContext; 
      if (context == null) 
      { 
       throw new ArgumentNullException("context"); 
      } 
      if (model != null) 
      { 
       controller.ViewData.Model = model; 
      } 
      using (var sw = new StringWriter()) 
      {     
       var viewResult = ViewEngines.Engines.FindPartialView(context, viewName); 
       var viewContext = new ViewContext(context, viewResult.View, controller.ViewData, controller.TempData, sw); 
       viewResult.View.Render(viewContext, sw); 
       viewResult.ViewEngine.ReleaseView(context, viewResult.View); 


       //return sw.GetStringBuilder().ToString(); 
       return new StringReader(sw.ToString()); 

      } 
      #endregion 
     } 


    } 
} 

現在,撥打上面的方法在你的控制器動作來訪問你的意見HTML,並通過Your View NameYour Model Name(如果您沒有模型,傳遞null):

public ActionResult YourControllerAction() 
{ 

    //....  
    StringReader htmlView = this.ViewToString("YourViewName", YourModelObject);  
    //Now htmlView containing the HTML of Your View 
    //and you can pass it to your Email function ..... 
// ... 

} 

htmlView將包含從您的視圖中的HTML ...

希望這會有所幫助...

+1

對一個非常不清楚的問題的一個很好的答案! :)只有一個疑問:爲什麼一個StringReader?爲什麼不是字符串? –

+0

謝謝Maddy。我們正在做同樣的事情(請參閱我回答的問題)http://stackoverflow.com/questions/20128137/mvc4-save-as-html-and-email-it但只是想看看是否有一個簡單的前瞻這樣做的方式。 – fireholster

+0

@LorenzoDematté提到的問題在每個評論中都不清楚,不會幫助我或任何人。我的問題很簡單,因此沒有提供大的細節。 – fireholster