gpt4 book ai didi

c# - 是否可以在不使用 ASP.NET MVC 项目中的参数的情况下通过 RedirectToAction 传递数据?

转载 作者:行者123 更新时间:2023-11-30 13:30:33 25 4
gpt4 key购买 nike

在我的 ASP.NET MVC 项目 Controller 中,我有一个

return RedirectToAction("CreatePerson", "Home")

这个 View 是一个创建一个人并且工作正常的表单。但是,我想 RedirectToAction 并使用从为系统创建用户的表单收集的数据预填充表单。

如何将 CreateUser 表单中的数据传递到 CreatePerson 表单中?

我知道我可以使用参数,但如果大多数时候我调用 CreatePerson View 而不需要这些参数,这真的是最好的方法吗。

如能提供正确方向的任何帮助,我们将不胜感激。

最佳答案

您不能使用 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 丢失数据,您可能需要对 TempData 使用 .Keep.Peek 以保留 future 请求的值(value)

例如:

使用 .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 并从 database

中选择 user

例如:

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);
}

更新 2

您可以将上述两种方法结合起来,例如将数据存储在 TempData 中并将 IDrouteValues 一起传递并检查 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);
}

关于c# - 是否可以在不使用 ASP.NET MVC 项目中的参数的情况下通过 RedirectToAction 传递数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32174093/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com