C# 获取当前页面html并设置隐藏字段(MVC4)
我试图捕获当前页面的Html,想知道如何使用razor语法设置hiddenfield 我想设定C# 获取当前页面html并设置隐藏字段(MVC4),c#,asp.net-mvc-4,C#,Asp.net Mvc 4,我试图捕获当前页面的Html,想知道如何使用razor语法设置hiddenfield 我想设定 @Html.Hidden("pageHtml") 我目前正在使用javascript获取页面html,但我想尝试使用@html属性或其他类似的东西 var html1 = $('#wrapper').html(); var encodedString = escape(html1); $('#pageHtml').val(encodedString); 或者,如果有人可以帮助我找到一种方法,在控制
@Html.Hidden("pageHtml")
我目前正在使用javascript获取页面html,但我想尝试使用@html属性或其他类似的东西
var html1 = $('#wrapper').html();
var encodedString = escape(html1);
$('#pageHtml').val(encodedString);
或者,如果有人可以帮助我找到一种方法,在控制器操作中获取当前视图html
请提出一些建议首先,创建一个控制器扩展方法
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并传递视图名称
和模型名称
(如果没有模型,则传递null):
htmlView将包含您视图中的HTML
希望这会有所帮助…所以我们最终就是这样做的…(我们的页面不包含任何安全数据,所以我们已经开始这样做了)
- 添加了一个隐藏字段来保存html
- 使用javascript方法设置带有编码页面html的隐藏字段 var html1=$('#wrapper').html(); var encodedString=escape(html1)
- 将控制器更改为将隐藏字段作为参数。(传递编码的html)
- 使用 var html=System.Uri.UnescapeDataString(pageHtml)
@Html.HiddenFor(x=>x.property)
…我需要页面的Html来创建完整的电子邮件附件。问题是我将如何设置模态属性。您的问题非常不清楚。。请对其进行编辑,以便更好地解释您试图实现的目标(对于一个非常不清楚的问题,请给出一个很好的答案!)只有一个疑问:为什么是StringReader?为什么不用绳子?谢谢你,麦迪。我们也在做同样的事情(见我回答的问题),但只是想看看是否有一种直接的方法来做这件事。@LorenzoDematté在每一条评论中提到的问题都不清楚,这对我或任何人都没有帮助。我的问题很简单,因此没有提供大的细节。@fireholster实际上,把你的问题弄清楚会帮助你得到更好的答案。此外,它还将有利于其他人,他们将在你寻找类似的问题。简单地编辑问题以包含您的第一条评论已经是一个很大的改进!ViewToString的输出可以是String、StringReader或StringBuilder,具体取决于您将如何使用。我打算对输出进行流式处理,并从HTML创建PDF,StringBulder和StringReader对我来说是更好的选择。一般来说,如果有很多字符串操作,StringBuilder是一个更好的选择。
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 .....
// ...
}