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-mvc – 无法加载文件或程序集”或其依赖项之一.该进
- asp.net-mvc – asp.net mvc 4 – 谁调用_ViewStart.cshtml
- asp.net-mvc – 如何使用ASP.NET MVC中的复选框创建选择列表
- asp.net-mvc – 如何将我的对象保存回LINQ to SQL中的数据库
- 如何强制我的ASP.net 2.0应用程序重新编译
- ASP.NET – 在屏幕底部显示应用程序生成日期/信息
- asp.net – IIS Express安装目录在哪里?
- asp.net-mvc – 在Azure上使用LocalDb MDF文件
- asp.net – 在应用程序级别之外注册为allowDefinition =’M
- asp.net-mvc-3 – 从单控制器操作返回多个部分视图?
- asp.net – 如何使用ajax调用跨域web api?
- asp.net中MVC借助Iframe实现无刷新上传文件实例
- asp.net – 在Azure Web App中设置EF连接字符串
- ASP.NET对txt文件相关操作(读
- asp.net – 服务器端/客户端或两者用户输入验证
- asp.net-web-api – mvc webapi cross domain po
- C# 快速高效率复制对象另一种方式 表达式树
- asp.net – 在什么情况下,.NET进程和AppDomains在
- ASP.net RequiredFieldValidator VisualStudio 2
- asp.net – 在代码隐藏中更改文本框BackColor
