在VB中使用ActionMailer.Mvc发送电子邮件,无法查找视图

时间:2012-08-20 15:04:47

标签: asp.net-mvc vb.net asp.net-mvc-3 actionmailer.net

我尝试发送电子邮件时收到的错误是:

  

NoViewsFoundException

     

您必须提供此电子邮件的视图。应该命名视图   〜/ Views / Email / VerificationEmail.html.vbhtml.txt.cshtml或   〜/ Views / Email / VerificationEmail.html.vbhtml.html.cshtml(或aspx for   WebFormsViewEngine)取决于您希望呈现的格式。

在线错误:

Return Email("~/Views/Email/VerificationEmail.html.vbhtml", model)

电子邮件是否可以用.vbhtml发送,是否必须以.cshtml格式发送?这怎么能用于VB?

这是我的代码控制器:

Imports ActionMailer.Net.Mvc

Public Class EmailController
    Inherits MailerBase

    Public Function VerificationEmail(ByVal model As RegisterModel) As EmailResult

        [To].Add(model.Email)
        From = "me@my.org"
        Subject = "Thanks for registering with us!"
        Return Email("~/Views/Email/VerificationEmail.html.vbhtml", model)

    End Function

End Class

以下是我的观点:

@modelType MyBlog.RegisterModel

@Code
    Layout = Nothing
End code

Welcome to My Cool Site, @Model.UserName

We need you to verify your email.  Click this nifty link to get verified!

@Html.ActionLink("Verify", "Account", New With {.code = Model.Email})

Thanks!

3 个答案:

答案 0 :(得分:4)

在阅读了几个问题并回答之后,它可以使用它:

public override string ViewPath {
        get { return AppDomain.CurrentDomain.BaseDirectory + @"\EmailTemplates\"; }
    }

答案 1 :(得分:2)

当然你可以拥有vbhtml个电子邮件模板,你只需要注意命名(.cshtml的异常消息是硬编码的,所以不要混淆它)。

您的视图被正确命名为VerificationEmail.html.vbhtml,您只需要从Email调用中删除视图名称中的所有前缀:

Return Email("VerificationEmail", model)

因为ActionMailer会自动添加前缀并为您选择正确的模板。

请注意,目前无法使用以~开头的相对视图名称,例如"~/Views/..."(我不知道这是一个错误或特征)。

因此您需要将邮件模板放到常规视图文件夹中,例如

  • /Views/{MailControllerName}/
  • /View/Shared/

答案 2 :(得分:1)

与Chad Richardson有同样的问题。要解决尝试从其他区域发送电子邮件时发生的问题,只需将此代码添加到Application_Start方法:

var razorEngine = ViewEngines.Engines.OfType<RazorViewEngine>().First();
    razorEngine.ViewLocationFormats = razorEngine.ViewLocationFormats.Concat(new string[] 
    { 
        "~/Areas/.../{0}.cshtml"
    }).ToArray();