У меня есть контроллер с именем EmailController , который (как вы уже догадались) отвечает за отправку электронных писем.
Примером этого является то, что пользователи моего сайта могут «любимые» вещи,и если какой-то другой пользователь делает что-то с одной из этих «вещей», то мне нужно отправить электронное письмо всем пользователям, которые «одобрили» его.Вроде как оповещение по электронной почте.
Проблема в том, что я не уверен, как вызвать метод действия моего EmailController из другого метода действия (который является HTTP POST, когда пользователь что-то делает).
Обычно я бы помещал этот вид операции (отправка по электронной почте) в службу, а фактическая логика отправки по электронной почте (SMTP) равна в службе, но EmailController отвечает за настройкусодержимое электронного письма (например, HTML), для которого необходимо отобразить представление в строку (следовательно, ему необходим контекст контроллера и он не может перейти в службу).
Как мне этого добиться?
Я не могу просто использовать статический вспомогательный метод, потому что, как я могу сделать представление?Мне нужно передать контекст контроллера методу или чему-то еще.
Пример потока:
- Пользователь A переходит на страницу и отправляет форму.
- HTTPВызван POST ControllerAActionMethodA, данные отправлены в БД.
- Застрял.
Итак, на шаге 3 мне нужно:
- Извлечь некоторую информацию изданные просто POST'ed
- Создание модели представления
- Визуализация строго типизированного представления в строку
- Вызов метода обслуживания, который я создал, для отправки электронной почты SMTP
В настоящее время у меня есть 2/3/4 выше в EmailController, так что я надеялся использовать это.
В качестве примечания, я надеялся сделать почтовое сообщение асинхронным (так как пользователь, который только что создал некоторые данные, не заботится о том, что другой пользователь должен получить по электронной почте).
Может кто-нибудь дать мне несколько советов о том, как организовать эти отдельные проблемы (отправкаданные, создание представления HTML в строку, отправка электронной почты).
Возможно, HTML-помощник или прМетод, выбранный в базовом контроллере, является лучшим вариантом, чем контроллер?
К вашему сведению, вот мой метод "Просмотр в строку" (я взял другой вопрос стека и отлично работает):
protected string RenderViewToString(string viewName, object model)
{
if (string.IsNullOrEmpty(viewName))
viewName = ControllerContext.RouteData.GetRequiredString("action");
ViewData.Model = model;
using (var sw = new StringWriter())
{
var viewResult = ViewEngines.Engines.FindView(ControllerContext, viewName, null);
var viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}