asp.net-mvc – 发送asp.net mvc动作结果里面的电子邮件
我想在asp.net mvc中使用我的Action作为模板引擎,导致字符串的形式,我可以通过电子邮件发送。
伪代码: public ActionResult Register() { SendEmail(View().ToString()); return new EmptyResult(); } 解决方法
首先,您仍然可能希望从您的操作返回一个视图,因此返回一个EmptyResult不是最好的;但是,当您在注册过程中处理页面流时,您会得出结论。
我假设您希望使用您已经创建的View创建一个HTML电子邮件。这意味着你希望得到如下结果: public ActionResult CreateEmailView(RegistrationInformation info) { var userInformation = Membership.CreateNewUserLol(info); return View(userInformation) } 并将其作为电子邮件的正文发送。你可以重用你的意见和所有有趣的东西。 您可以通过创建自定义的ActionResult并利用此功能生成文本来利用该框架。 这是一些可能实际编译和工作的类似c#的伪代码。首先,自定义ActionResult: public class StringResult : ViewResult { public string Html { get; set; } public override void ExecuteResult(ControllerContext context) { if (context == null) { throw new ArgumentNullException("context"); } if (string.IsNullOrEmpty(this.ViewName)) { this.ViewName = context.RouteData.GetRequiredString("action"); } ViewEngineResult result = null; if (this.View == null) { result = this.FindView(context); this.View = result.View; } ViewContext viewContext = new ViewContext( context,this.View,this.ViewData,this.TempData); using (var stream = new MemoryStream()) using (var writer = new StreamWriter(stream)) { // used to write to context.HttpContext.Response.Output this.View.Render(viewContext,writer); writer.Flush(); Html = Encoding.UTF8.GetString(stream.ToArray()); } if (result != null) { result.ViewEngine.ReleaseView(context,this.View); } } } 这覆盖了基本方法的ExecuteResult(这是来自我重写的基本方法的代码;在RC1中可能已更改),以呈现到我控制的流而不是响应的输出流。所以它将文本精确地拉出给客户端机器。 接下来,如何在控制器操作中使用它: public ActionResult CreateEmailView(RegistrationInformation info) { var userInformation = Membership.CreateNewUserLol(info); // grab our normal view so we can get some info out of it var resultView = View(userInformation); // create our string result and configure it StringResult sr = new StringResult(); sr.ViewName = resultView.ViewName; sr.MasterName = resultView.MasterName; sr.ViewData = userInformation; sr.TempData = resultView.TempData; // let them eat cake sr.ExecuteResult(this.ControllerContext); string emailHtml = sr.Html; // awesome utils package,dude Utils.SendEmailKThx(userInformation,emailHtml); return resultView; } 我正在渲染相同的视图两次;我第一次把它渲染到一个流,第二次渲染它正常。可能有可能潜入到另一个地方的ViewResult的呼叫链中,并改变了Render的运作方式,但是粗略地看一下代码并没有显示任何内容。虽然框架相当不错,但对于进程部分的调用堆栈来说,还不够细致,可以轻松地在此过程中更改单个步骤。如果他们将ExecuteResult打破了一些不同的可覆盖方法,我们可以将其从渲染更改为输出流,以便渲染到我们的流,而不会覆盖整个ExecuteResult方法。好吧…. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – HttpUtility.UrlEncode和Application_Start
- asp.net – 如何添加一个访问控制允许原始头在IIS7有限制
- asp.net-mvc – 当前上下文中不存在名称“ViewBag” – 当在
- asp.net – ASMX Web服务对传入请求使用错误编码
- ASP.NET Web部件:非IE浏览器中的拖放支持
- asp.net-mvc-4 – 工作单元和通用存储库与实体框架5
- 如何清除Asp.Net按钮上所有文本框的值单击
- 在ASP.NET Web应用程序之间传递会话数据
- asp.net – WebForm_DoPostBackWithOptions没有使用chrome定
- asp.net-mvc – ASP.NET MVC 1.0 – 字典的模型绑定器
- asp.net-mvc – ASP.NET MVC应用程序自定义错误页
- asp.net调查问卷引擎
- asp.net – .Net核心Cookie身份验证在IIS中托管时
- 如何在ASP.NET WebService调用中动态初始化文化?
- asp.net-mvc – ASP.NET MVC Validationsummary
- .net – 使用COM注册托管程序集而不使用GAC
- asp.net – 即使在ssl上,在ViewState中存储信用卡
- asp.net-mvc – ASP.NET MVC – 如何从不同的控制
- asp.net-mvc – WebForms和MVC可以存在于一个项目
- asp.net-mvc-3 – CSS3 @ font-face休息Razor解析