我正在尝试捕获当前页面Html,并想知道如何使用剃刀语法设置隐藏字段
提起我要设置
@Html.Hidden("pageHtml")
我目前正在使用javascript来获取页面html,但同样的事情我想尝试使用@Html属性或其他东西
var html1 = $('#wrapper').html();
var encodedString = escape(html1);
$('#pageHtml').val(encodedString);
或者如果有人可以帮助我找到一种方法来获取控制器操作中的当前视图html
请提出一些建议
答案 0 :(得分:4)
首先,创建一个Controller Extension方法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
}
}
}
现在,在您的Controller Action中调用上面的方法来访问您的Views HTML并传递Your View Name
和Your 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 :(得分:-1)
所以这就是我们最终如何做到的...(我们的页面不包含任何安全数据,所以我们已经为此而去了)
使用javascript方法设置带有编码页面html的隐藏字段 var html1 = $('#wrapper')。html(); var encodedString = escape(html1);
更改控制器以将隐藏字段作为参数。 (传递编码的html)
使用
取消了htmlvar html = System.Uri.UnescapeDataString(pageHtml);