Я столкнулся с той же проблемой, и никто из предложенного решения не сработал.
Я решил это простым использованием класса помощи, который сохраняет модель для меня.
Решение не элегантное, но эффективное:)
public interface ISessionHelper
{
void AddRenewItem(string key, object item);
object GetItem(string key);
}
public class SessionHelper : ISessionHelper
{
private readonly Dictionary<string, object> _sessionBag;
public SessionHelper()
{
_sessionBag = new Dictionary<string, object>();
}
public void AddRenewItem(string key, object item)
{
if (_sessionBag.Keys.Contains(key)) _sessionBag.Remove(key);
_sessionBag.Add(key, item);
}
public object GetItem(string key)
{
if (_sessionBag.Keys.Contains(key))
{
return _sessionBag[key];
}
return null;
}
}
В моем методе get я добавляю элемент в словарь:
public async Task<IActionResult> OnGetAsync(int? id)
{
...
_sessionHelper.AddRenewItem(this.ToString(), this);
...
}
В своем методе записи я беру модель из словаря и назначаю необходимые свойства для текущей модели:
public async Task<IActionResult> OnPostApplyGuess(int itemId)
{
GameModel model = (GameModel) _sessionHelper.GetItem(this.ToString());
MyProp1= model.MyProp1;
MyProp2 = model.MyProp2 ;
MyProp3= model.MyProp3;
if (!ModelState.IsValid)
{
return Page();
}
return Page();
}
Не забудьте добавить сервис как Singleton:
services.AddSingleton<ISessionHelper, SessionHelper>();
Надеюсь, это кому-то помогло:)