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

在我的ASP.NET MVC项目的控制器中,我有一个

return RedirectToAction("CreatePerson", "Home") 

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

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

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

任何正确方向的帮助将不胜感激。

您无法使用RedirectAction发送数据。 那是因为你正在进行301重定向,然后又回到客户端。

所以最好使用TempData

假设您将使用以下属性创建模型:

 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丢失数据,您可能需要使用带有TempData的.Keep或.Peek来保留未来请求的值

例如:

.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存储数据并使用TempData传递ID ,并检查TempData是否为null,然后使用ID方法回TempData数据检索。

例如:

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

为此存在许多超载

 protected internal RedirectToRouteResult RedirectToAction(string actionName, object routeValues); 

您要做的是右键单击该方法和视图定义,您应该看到它的许多重载

 // Summary: // Redirects to the specified action using the action name and route values. // // Parameters: // actionName: // The name of the action. // // routeValues: // The parameters for a route. // // Returns: // The redirect result object. 

1-创建模型的对象2-你可以使用session将参数传递给你的其他动作,然后将对象放入viewbag中,在你的视图中获取它

而不是这个:

 return RedirectToAction(actionName: "AddNews", routeValues: new { id = idtip } ); 

你可以这样做:

  return RedirectToAction("AddNews");