Вы не можете отправить данные с RedirectAction
. Это потому, что вы выполняете перенаправление 301
и возвращаетесь к клиенту.
Поэтому лучше использовать TempData
Предполагая, что вы будете иметь модель для createperson
со следующими свойствами:
public class CreatePersonData
{
public string name {get; set;}
public string address {get; set;}
}
Заливаем model
и магазин в TempData
CreatePersonData person=new CreatePersonData();
person.name="SomeName";
person.address="SomeAddress";
TempData["person"]=person;
return RedirectToAction("CreatePerson", "Home")
Теперь при получении только получать его от tempdata
и передать заполненный model
к view
public ActionResult CreatePerson()
{
CreatePersonData person=new CreatePersonData()
var loadPerson= TempData["person"];
person = loadPerson;
return View(person);
}
UPDATE
Как @StephenMuecke сделал точку потери данных с TempData
вам может понадобиться использовать .Keep
или .Peek
с TempData, чтобы сохранить значение для будущих запросов
Ед.:
с .Peek
//PEEK value so it is not deleted at the end of the request
var loadPerson= TempData.Peek("person");
или с .Keep
//get value marking it from deletion
var loadPerson = TempData["person"];
//later on decide to keep it
TempData.Keep("person");
или @Stephen сказал, просто передать id
и выберите user
из базы данных
Ex:
return RedirectToAction("CreatePerson", "Home", new { ID = User.ID });
Теперь в вашем CreatePerson
ActionResult
просто получить его из БД, как показано ниже:
public ActionResult CreatePerson(int ID)
{
CreatePersonData person=new CreatePersonData();
var user=(from u in tbl_user select u where u.ID=ID);
person.name=user.name;
person.address=user.address;
return View(person);
}
UPDATE 2
Вы можете комбинировать оба вышеуказанных подходов, как хранение данных в TempData
и передачи ID
с routeValues
и проверьте, нет ли TempData
, затем возврат к извлечению данных с использованием метода ID
.
Ex:
public class CreatePersonData
{
public string Id{get; set;}
public string name {get; set;}
public string address {get; set;}
}
public ActionResult CreatePerson(int ID)
{
CreatePersonData person=new CreatePersonData();
var loadPerson=(CreatePersonData)TempData.Peek("person"); //cast the object from TempData
if(loadPerson!=null && loadPerson.Id==ID)
{
person=loadPerson;
}
else
{
var user=(from u in tbl_user select u where u.ID=ID);
person.name=user.name;
person.address=user.address;
}
return View(person);
}
Вы должны сохранять 'Пользователь' в методе POST-метода CreateUser, а затем перенаправлять на« CreatePerson »и передавать« ID »только что созданного« Пользователь »- возвращать RedirectToAction (« CreatePerson "," Home ", new {ID = theUser.ID});', а затем в методе 'CreatePerson (int ID)' получите 'User' из базы данных. –