У меня есть расширение для ActionResult, которое добавляет тост в TempData при возврате страницы:
public static IActionResult WithMessage(this ActionResult result, InformMessage msg)
{
return new InformMessageResult(result, msg);
}
и это InformMessageResult:
public class InformMessageResult : ActionResult
{
public ActionResult InnerResult { get; set; }
public InformMessage InformMessage { get; set; }
public InformMessageResult (ActionResult innerResult, InformMessage informMsg)
{
InnerResult = innerResult;
InformMessage = informMsg;
}
public override async Task ExecuteResultAsync(ActionContext context)
{
ITempDataDictionaryFactory factory = context.HttpContext.RequestServices.GetService(typeof(ITempDataDictionaryFactory)) as ITempDataDictionaryFactory;
ITempDataDictionary tempData = factory.GetTempData(context.HttpContext);
tempData.Put("InformMessage", InformMessage);
await InnerResult.ExecuteResultAsync(context);
}
}
Это хорошо работает с
return RedirectToPage(etc).WithMessage(etc)
и т.п., но не с
return Page().WithMessage(etc)
и отладчик выделяет
await InnerResult.ExecuteResultAsync(context);
говоря, что InnerResult не установлен для экземпляра объекта.
Есть ли способ заставить эту работу работать с Return Page ()?
Изменить для дополнительной информации:
Я проверил то, что было отправлено как «InnerResult», и похоже, что с Return Page () все равно null (я бы сказал, что по замыслу я ничего не делаю до этого момента):
с RedirectToPage ():
С Page ():