Отправка писем с помощью ActionMailer.Mvc в VB, не удается найти представление

Ошибка, которую я получаю, когда пытаюсь отправить электронное письмо:

NoViewsFoundException

Вы должны предоставить представление для этого письма. Представления должны называться ~/Views/Email/VerificationEmail.html.vbhtml.txt.cshtml или ~/Views/Email/VerificationEmail.html.vbhtml.html.cshtml (или aspx для 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 ответа

Решение

Конечно, вы можете иметь vbhtml шаблоны электронной почты вам просто нужно быть осторожным с именами (.cshtmlСообщение об исключении жестко закодировано, поэтому не путайте его)

Ваше мнение правильно названо как VerificationEmail.html.vbhtml вам просто нужно удалить все префиксы из имени представления в Email вызов:

Return Email("VerificationEmail", model)

Потому что ActionMailer будет автоматически добавлять префиксы и выбирать правильный шаблон для вас.

Обратите внимание, что в настоящее время вы не можете использовать относительные имена, подобные которым начинаются с ~ например "~/Views/..." (Я не знаю, это ошибка или особенность).

Так что вам нужно поместить свой почтовый шаблон в обычные папки просмотра, например

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

Прочитав пару вопросов и ответ, он может заставить его работать с этим:

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

Была та же проблема, что и у Чеда Ричардсона. Чтобы решить проблему, возникающую при попытке отправить письмо из другой области, просто добавьте этот код в метод Application_Start:

var razorEngine = ViewEngines.Engines.OfType<RazorViewEngine>().First();
    razorEngine.ViewLocationFormats = razorEngine.ViewLocationFormats.Concat(new string[] 
    { 
        "~/Areas/.../{0}.cshtml"
    }).ToArray();
Другие вопросы по тегам