[英]How can i pass complex object from view to controller with POST - ASP.NET MVC
[英]Pass complex object with redirect in ASP.NET MVC?
嗨,
我有一個看起來像這樣的動作:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Register(AdRegister adRegister, IEnumerable<HttpPostedFileBase> files)
AdRegister是一個復雜的類,我需要將其傳遞給Register操作中的一個重定向方法,如下所示:
return this.RedirectToAction("Validate", adRegister);
Validate操作如下所示:
public ActionResult Validate(AdRegister adRegister)
我知道我可以傳遞簡單的參數但在這種情況下它是一個復雜的對象。 此示例不起作用,adRegister的屬性將為null。
這是可能的,如果是這樣,怎么樣?
最好的祝福
更多信息:注冊操作將采用adRegister並對其執行魔術,然后將其發送到Validate操作。 Validate操作將向用戶返回驗證頁面。 當用戶點擊授權按鈕時,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);
...
}
一個想法可能會創建一個會話變量並傳遞一個引用該會話變量的Key,如果該對象需要一些視圖?
ASP.NET MVC的tempdata應該是完美的。
也就是說,TempData或Session是一個選項,但有一些缺點,如相當違反,往往是模糊或難以調試。 可能更可取的是“暫存”持久性存儲中的臨時值,例如用戶的配置文件或您自己的數據庫,然后通過validate方法傳遞密鑰,然后可以從所述存儲加載數據。 這也開辟了恢復廢棄車等的可能性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.