Создание электронного письма в формате HTML со страницы Razor View со строго типизированной модельюC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Создание электронного письма в формате HTML со страницы Razor View со строго типизированной моделью

Сообщение Anonymous »


Я пытаюсь создать электронное письмо в формате HTML со страницы Razor. Это хорошо работает для HTML без какой-либо модели. Однако когда я добавляю модель «WelcomeEmailModel» и пытаюсь передать переменную, я получаю следующую ошибку в параметре «@Model.UserName».

'Ссылка на объект не установлена ​​на экземпляр объекта.'

Модель не передается в представление.

В ViewData (см. изображение ниже) я вижу, что модель «Имя пользователя» заполнена словом «Джейн Доу».

Примеры, которые я нашел в Google, не включают модель. Можно ли отправить модель таким способом или модель следует передавать другим способом?


Изображение


Просмотр бритвы

@page @model Добро пожаловатьEmailModel Добро пожаловать на наш сайт! Добро пожаловать, @Model.UserName! Спасибо, что зарегистрировались на нашем сайте. Мы рады видеть вас на борту!

EmailService.cs
пространство имен FlightLog.Services { общедоступный класс EmailService { частный EmailClient только для чтения _emailClient; частная строка только для чтения _senderEmailAddress; частный только для чтения IrazorViewEngine _razorViewEngine; частный только для чтения IServiceProvider _serviceProvider; public EmailService (строка ConnectionString, строка senderEmailAddress, IrazorViewEngine razorViewEngine, IServiceProvider serviceProvider) { _emailClient = новый EmailClient (connectionString); _senderEmailAddress = senderEmailAddress; _razorViewEngine = razorViewEngine; _serviceProvider = поставщик услуг; } public async Task RenderViewToStringAsync(строка viewName, модель TModel) { вар actionContext = GetActionContext(); вар viewEngineResult = _razorViewEngine.FindView(actionContext, viewName, false); //var viewEngineResult = _razorViewEngine.GetView("~/Views/EmailTemplates", $"{viewName}.cshtml", false); если (!viewEngineResult.Success) { throw new InvalidOperationException($"Невозможно найти представление '{viewName}'"); } используя (var sw = новый StringWriter()) { вар tempDataSerializer = (TempDataSerializer)_serviceProvider.GetService(typeof(TempDataSerializer)); вар tempDataProvider = новый SessionStateTempDataProvider (tempDataSerializer); вар viewContext = новый ViewContext( действиеКонтекст, viewEngineResult.View, новый ViewDataDictionary( MetadataProvider: новый EmptyModelMetadataProvider(), modelState: новый ModelStateDictionary()) { Модель = модель }, новый TempDataDictionary(actionContext.HttpContext, tempDataProvider), св, новый HtmlHelperOptions() ); ждут viewEngineResult.View.RenderAsync(viewContext); вернуть sw.ToString(); } } частный ActionContext GetActionContext() { вар httpContext = новый DefaultHttpContext { RequestServices = _serviceProvider }; вернуть новый ActionContext(httpContext, новый RouteData(), новый ActionDescriptor()); } общедоступная асинхронная задача SendEmailAsync (получатель строки, тема строки, тело строки) { var emailContent = новый EmailContent(тема) { HTML = тело }; вар emailMessage = новое EmailMessage( _senderEmailAddress, получатель, электронная почтаСодержимое); ждут _emailClient.SendAsync(WaitUntil.Completed, emailMessage, CancellationToken.None); } общедоступная асинхронная задача SendWelcomeEmailAsync (строка получателя, строка userName) { var viewModel = новая модель WelcomeEmailModel { Имя пользователя = Имя пользователя }; строка emailBody = ожидание RenderViewToStringAsync("WelcomeEmail", viewModel); await SendEmailAsync(получатель, «Добро пожаловать на наш сайт!», emailBody); } } }
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»