微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 使用ASP.NET MVC中的重定向传递复杂对象?

嗨,

我有一个这样的动作:

[AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Register(AdRegister adRegister,IEnumerable<HttpPostedFileBase> files)

AdRegister是一个复杂的类,我需要在注册操作中进一步将其传递给重定向方法,如下所示:

return this.RedirectToAction("Validate",adRegister);

验证操作如下所示:

public ActionResult Validate(AdRegister adRegister)

我知道我可以传递简单的参数,但在这种情况下它是一个复杂的对象.此示例不起作用,adRegister的属性将为空.

这是可能的,如果是这样,怎么样?

最好的祝福

更多信息:注册动作将采取adRegister并做一些魔法,然后它将被发送到验证操作.验证操作将返回验证页面用户.当用户按下授权按钮时,adRgister将从该表单中填写,然后发送到将被保存的vValidate帖子.我已经查看了adRegister在缓存或数据库中临时放置,但如果我可以简单地将其传递给下一个动作,将会更好.

解决方法

一种可能性是传递查询字符串中的简单属性
return RedirectToAction(
    "Validate",new { 
        foo = adRegister.Foo,bar = adRegister.Bar,... and so on for all the properties you want to send
    }
);

另一种可能性是将它存储在TempData(对于重定向的整个生命周期)或Session(在ASP.NET会话的整个生命周期中):

TempData["adRegister"] = adRegister;
return RedirectToAction("Validate");

然后从TempData中检索它:

public ActionResult Validate()
{
    adRegister = TempData["adRegister"] as AdRegister;
    ...
}

一个可能性(和我建议你的一个)是在数据存储区的POST方法中保留此对象:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Register(AdRegister adRegister,IEnumerable<HttpPostedFileBase> files)
{
    ...
    string id = Repository.Save(adRegister);
    return RedirectToAction("Validate",new { id = adRegister.Id });
}

然后在重定向后从数据存储中取出它:

public ActionResult Validate(string id)
{
    AdRegister adRegister = Repository.Get(id);
    ...
}

原文地址:https://www.jb51.cc/csharp/97015.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐