Ban*_*hee 10 .net c# asp.net-mvc controls action
嗨,
我有一个看起来像这样的动作:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Register(AdRegister adRegister, IEnumerable<HttpPostedFileBase> files)
Run Code Online (Sandbox Code Playgroud)
AdRegister是一个复杂的类,我需要将其传递给Register操作中的一个重定向方法,如下所示:
return this.RedirectToAction("Validate", adRegister);
Run Code Online (Sandbox Code Playgroud)
Validate操作如下所示:
public ActionResult Validate(AdRegister adRegister)
Run Code Online (Sandbox Code Playgroud)
我知道我可以传递简单的参数但在这种情况下它是一个复杂的对象.此示例不起作用,adRegister的属性将为null.
这是可能的,如果是这样,怎么样?
最好的祝福
更多信息:注册操作将采用adRegister并对其执行魔术,然后将其发送到Validate操作.Validate操作将向用户返回验证页面.当用户点击授权按钮时,adRgister将从表单中填充,然后发送到vValidate帖子,在那里保存.我已经查看过将adRegister暂时放在缓存或数据库中,但如果我可以简单地将它传递给下一个操作,那就更好了.
Dar*_*rov 17
一种可能性是在查询字符串中传递简单属性:
return RedirectToAction(
"Validate",
new {
foo = adRegister.Foo,
bar = adRegister.Bar,
... and so on for all the properties you want to send
}
);
Run Code Online (Sandbox Code Playgroud)
另一种可能性是将它存储在TempData(重定向的生命周期)或Session(ASP.NET会话的生命周期)中:
TempData["adRegister"] = adRegister;
return RedirectToAction("Validate");
Run Code Online (Sandbox Code Playgroud)
然后从TempData中检索它:
public ActionResult Validate()
{
adRegister = TempData["adRegister"] as AdRegister;
...
}
Run Code Online (Sandbox Code Playgroud)
另一种可能性(也是我建议您使用的那种)是将此对象保留在数据存储区的POST方法中:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Register(AdRegister adRegister, IEnumerable<HttpPostedFileBase> files)
{
...
string id = Repository.Save(adRegister);
return RedirectToAction("Validate", new { id = adRegister.Id });
}
Run Code Online (Sandbox Code Playgroud)
然后在重定向后从数据存储中获取它:
public ActionResult Validate(string id)
{
AdRegister adRegister = Repository.Get(id);
...
}
Run Code Online (Sandbox Code Playgroud)