您不能使用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);
}
更新
由于 @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
例如:
return RedirectToAction("CreatePerson", "Home", new { ID = User.ID });
现在在您的 CreatePerson ActionResult 中,只需从 db 获取它,如下所示:
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);
}
更新 2
您可以将上述两种方法结合起来,例如将数据存储在TempData 中并将ID 与routeValues 一起传递,并检查TempData 是否不为空,然后回退到使用ID 方法检索数据。
例如:
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);
}