ASP.NET MVC 将视图渲染为用于电子邮件发送的字符串

2023-12-24

我想使用 MVC 视图创建电子邮件正文,我遇到过这个(http://www.brightmix.com/blog/renderpartial-to-string-in-asp-net-mvc/ http://www.brightmix.com/blog/renderpartial-to-string-in-asp-net-mvc/)但它似乎不适用于强类型视图(ViewContext 为 null)。但我想要的是能够呈现包括母版页在内的完整视图的东西。

我认为,如果有一种方法只需调用视图而不进行重定向,只需写入不同的流并在控制器内发送电子邮件就可以做到这一点,但我不知道如何调用视图。

任何建议都会很棒!

提前致谢。

Gifster


这个问题已经被提出(并回答)了:

将视图渲染为字符串 https://stackoverflow.com/questions/483091/render-a-view-as-a-string

这是我使用的位:

protected string RenderViewToString<T>(string viewPath, T model, System.Web.Mvc.ControllerContext controllerContext) {
        using (var writer = new StringWriter()) {
            var view = new WebFormView(viewPath);
            var vdd = new ViewDataDictionary<T>(model);
            var viewCxt = new ViewContext(controllerContext, view, vdd, new TempDataDictionary(), writer);
            viewCxt.View.Render(viewCxt, writer);
            return writer.ToString();
        }
    }

此方法的最佳位置是在您的 mvc 项目引用的类库项目中。主要是因为这样您可以轻松地在所有应用程序中重用它。但也因为它既不是应用程序逻辑(因此不属于控制器)也不属于模型。有些东西只是实用程序。

请注意,要使其正常工作,viewPath 参数必须是文件的物理路径,并带有 .aspx 扩展名。您不能使用路由,因为 WebFormView 类需要在其构造函数中使用物理路径。

这将呈现完整视图并考虑母版页。


HTML 电子邮件的健康警告:

HTML 电子邮件和您阅读电子邮件的设备比网站和浏览器的设计更加困难和限制性更大。在一种情况下有效的方法,在另一种情况下则无效。因此,对于 html 电子邮件,您确实必须保持简单!您带有菜单和相关图像以及其他任何内容的可爱页面,只是不适用于所有电子邮件设备。举个例子,images src 属性需要是绝对的并包含域:

这是行不通的:

<img src="/Images/MyImage.gif" ... /> 

位这将:

 <img src="http://www.mywebsite.com/Images/MyImage.gif" ... /> 

有了这些注意事项,它运行良好,我就使用它。只是不要试图向他们发送您网站的全部花招,因为那是行不通的!

更重要的是:

所有 CSS 都必须是内联的,并且仅用于基本样式:颜色、边框、填充。但没有浮动和定位。 CSS 布局在不同设备上的工作方式不一致!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET MVC 将视图渲染为用于电子邮件发送的字符串 的相关文章

  • 更改 ASP.NET MVC 筛选器中的视图

    如果用户使用移动浏览器 我想将用户重定向到不同的视图 我决定使用 MVC 过滤器来完成此操作 将其应用于我想要具有移动视图的操作 我相信这个重定向需要在 OnActionExecuted 中发生 但是 filterContext 不包含视图
  • 发送电子邮件属于应用程序的表示层还是业务层?

    我正在尝试找出在我的 Asp net MVC 应用程序中放置发送电子邮件的代码的最佳区域 现在 我的应用程序设置在 2 个 VS 项目中 将业务层与表示层分开 我正在尝试设置一种情况 当用户重置密码时 业务逻辑更改密码后 服务器将向用户发送
  • MVC3:一个控制器是否需要 Windows 身份验证,而第二个控制器允许匿名?

    我有一个控制器 用于在需要 Windows 身份验证的内部 Web 应用程序中呈现页面 是否存在第二个控制器 用于对系统进行基于 JSON 的查询 不需要进行 Windows 身份验证 那可能吗 看来我目前只能做其中之一 有什么建议么 我们
  • .NET Core 2.2共享Cookie导致登录时出现Bad Request错误

    我有 2 个应用程序在它们之间共享 cookie 这是startup cs中的配置 services ConfigureApplicationCookie options gt Cookie settings options Cookie
  • ASP.NET MVC 2 和 Google Maps Javascript API 版本 3

    不知何故 我无法使用 Google Maps Javascript API V3 在 ASP NET MVC 2 应用程序中获得简单的地图 我已经尝试过以下方法 站长 Removed Added 在 中添加了此内容
  • Valums 文件上传器 - 包括 ValidateAntiForgeryToken

    我正在尝试使用 MVC 保护我的上传控制器方法ValidateAntiForgeryToken但我正在努力弄清楚如何获得 RequestVerificationToken包含在帖子中 我的动作是这样的 HttpPost ValidateAn
  • 删除打印为 PDF 的选项

    当单击 Crystal 报告的打印按钮时 我看到以下内容 我不想先导出为 PDF 我只想在按下 打印 按钮时立即打印 我该如何配置此行为 听起来你想使用PrintToPrinter方法 根据 MSDN 将报表的指定页面打印到使用 Print
  • 维护用户 ID 的最佳实践 (MVC)

    我使用 FormsAuthentication 但添加了自定义 MemberShipProvider 来根据自定义用户表进行验证 所有包含 用户数据 的表都有一个 idUser 列 因此我需要维护用户 id 以便向用户显示他的数据 以前我使
  • 是否可以手动更新 ModelState.IsValid ?

    我想尽可能使用内置的验证功能 我还想对 CRUD 方法使用相同的模型 但是 由于无法使用标准模式完成下拉列表 因此我必须手动验证它 在回发方法中 我只想验证下拉列表并将此结果添加到 ModelState 中 这样我就不必验证使用数据注释完成
  • ASP.NET MVC 使用类型化模型将模型与单选按钮列表进行两种方式数据绑定

    我有一个由单选按钮矩阵组成的 mvc 视图 每行单选按钮都在一个组中 代表模型中的一个键入对象 使用各种博客和帖子的指导 我已成功将发布的表单结果绑定到控制器操作中的类型化模型数组 但是似乎无法成功反转效果并将现有模型绑定到单选按钮 同时保
  • MVC 5:模型中的字典绑定到视图中的一系列复选框?

    当我将模型发布到控制器以保存它时 控制器会得到一个空字典 哪里出了问题 绑定工作有什么特别要做的吗 我的模型有这个属性 public Dictionary
  • ASP.NET MVC - 服务层,每个控制器操作中的单个或多个服务?

    我开始在我的 MVC 项目中实现一个服务层 以精简一些臃肿的控制器 它也有存储库 工作单元模式 我的问题是 如果您的页面有一个复杂的视图模型 其中包含大量子对象等 并且在幕后有大量逻辑发生 让您了解原始开发人员编写的控制器有近 4000 行
  • ASP.NET MVC 最佳实施实践

    最近 我被要求完全重写和重新设计一个网站 该公司的所有者强调 他希望该网站采用最新 最先进的技术来制作 但要避免额外的成本 截至目前 我在研究 CMS 实现和使用 MVC 编写新实现之间左右为难 该网站主要是宣传册件 但需要允许访问者通过表
  • ASP.NET MVC 3 中未经身份验证用户的缓存主页

    我的网站有一个主页 我想为匿名用户缓存该页面 并将其设置为经过身份验证的用户的 私有 以便他们将其保存在自己的计算机上 而不是其他地方 因此 如果用户是匿名的 我想将页面保存在服务器缓存中 并使用以下命令保存在浏览器缓存中Cache con
  • 如何在控制器中模拟 Automapper (IMapper)

    我正在尝试为现有的 MVC Web 应用程序编写单元测试 我在自动映射器中面临一些问题 IMapper 每当使用地图函数时它都会返回null value 我的控制器代码 public class UserAdministrationCont
  • MVC WebGrid 设置渲染的ID

    使用 MVC 3 中的 WebGrid 如何在呈现时指定控件的名称 即呈现时表的 id var someGrid new WebGrid source Model Users defaultSort Name rowsPerPage 50
  • 后退按钮不会导致回发到 MVC 中的控制器操作

    当我在 Win7 上的 IE10 或 Chrome 中单击后退按钮时 它不会到达 MVC 控制器中的断点 IE 开发者工具中的 网络 选项卡显示 304 未修改 并且 Fiddler 未捕获该请求 我期待着回帖 这样我就可以在我的控制器中工
  • IHttpModule 和控制台应用程序的流畅 NHibernate 模式

    我目前有一个在存储库模式中使用 Fluent NHibernate LINQ 的 C MVC 2 Web 应用程序 并使用 Ninject 来处理 MVC 控制器的构造函数要求 将其传递到存储库中 我的 Fluent NHibernate
  • Google Analytics API 显示页面浏览量

    使用 NET MVC 3 我想在网站的每个页面上显示页面视图 我已经设置了谷歌分析 我知道有一个 API 但不知道从哪里开始 有什么指示可以说明我需要什么 更具体地说 要查看什么来显示页面视图 在 Views Shared 文件夹中创建一个
  • 将自定义 ValueProviderFactories 添加到 ASP.NET MVC3?

    我试图尝试将 Protobuf ValueProviderFactory 添加到 MVC3 以便我可以选择 MIME 类型并将原始数据反序列化为操作参数的对象 我还可以使用它来更改默认的 Json 序列化器 看着JsonValueProvi

随机推荐