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