Лучший подход - сохранить тролль где-нибудь на сервере (в базе данных?), А затем при перенаправлении передать только идентификатор в действие индекса, чтобы он мог получить его обратно. Другая возможность - использовать TempData или Session:
[HttpPost]
public ActionResult CreateNew(TrollModel trollModel)
{
TempData["troll"] = trollModel;
return RedirectToAction("Index");
}
public ActionResult Index()
{
var trollModel = TempData["troll"] as TrollModel;
if (trollModel == null)
{
trollModel = new TrollModel
{
Name = "Default Troll",
Age = "666"
};
}
return View(trollModel);
}
TempData выдержит только одно перенаправление и будет автоматически удален при последующем запросе, тогда как Session будет постоянным во всех HTTP-запросах для сеанса.
Еще одна возможность состоит в передаче всех свойств объекта тролля в качестве аргументов строки запроса при перенаправлении:
[HttpPost]
public ActionResult CreateNew(TrollModel trollModel)
{
return RedirectToAction("Index", new
{
Age = trollModel.Age,
Name = trollModel.Name
});
}
public ActionResult Index(TrollModel trollModel)
{
if (trollModel == null)
{
trollModel = new TrollModel
{
Name = "Default Troll",
Age = "666"
};
}
return View(trollModel);
}
Теперь вам может потребоваться переименовать действие Index POST, поскольку у вас не может быть двух методов с одинаковыми именами и аргументами:
[HttpPost]
[ActionName("Index")]
public ActionResult HandleATroll(TrollModel trollModel)
{
return View(trollModel);
}