簡體   English   中英

在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM