簡體   English   中英

如何在Asp.NET MVC中使用RedirectToAction()傳遞多個對象?

[英]How to pass multiple objects using RedirectToAction() in Asp.NET MVC?

我想使用redirectToAction()方法傳遞多個對象。 下面是我要重定向到的動作結果。

public ActionResult GetEmployees(Models.Department department, Models.Category category, Models.Role role)
        {  

return View();
}

我想做類似下面的事情

public ActionResult test()
{
Models.Department dep = new Models.Department();
Models.Category cat.......etc

return RedirectToAction("GetEmployees", dep, cat, role); }

任何幫助將不勝感激 - 謝謝

更新

我可以使用類似的東西嗎?

 Models.Department dep = new Models.Department() { DepId = employee.DepartmentId };
                    Models.Category cat = new Models.Category() { CatId = employee.JobCategoryId };
                    Models.Role title = new Models.Role() { RoleId = employee.JobTitleId };

            return RedirectToAction("GetEmployees", new { department = dep, category = cat, role = title });

您無法將對象傳遞給RedirectToAction方法。 此方法旨在僅傳遞參數。 因此,您需要在相應的GET請求中傳遞要發出的所有值:

return RedirectToAction("GetEmployees", new 
{
    DepId = dep.DepId,
    DepName = dep.DepName,
    CatId = cat.CatId,
    RoleId = role.RoleId,
    ... so on for each property you need
});

但更好的方法是只發送這些對象的ID:

return RedirectToAction("GetEmployees", new 
{
    DepId = dep.DepId,
    CatId = cat.CatId,
    RoleId = role.RoleId
});

然后在目標控制器操作中使用這些ID從基礎數據庫中檢索實體:

public ActionResult GetEmployees(int depId, int catId, int roleId)
{
    var dep = repository.GetDep(depId);
    var cat = repository.GetCat(catId);
    var role = repository.GetRole(roleId);
    ...
}

這本身並不是一個答案,但我總是看到與此類似的問題歸結為對HTTP如何工作的基本誤解或缺乏理解。 這不是批評,許多網站開發人員認為他們需要知道的只是HTML,JavaScript和CSS來制作一個網站,但他們忽略了需要真正理解他們的代碼運行的平台 以這種方式看待它:如果不了解您的目標平台(Windows,Mac,iOS,Android等),您就不會坐下來開始編寫應用程序。 必須知道每個處理內存,垃圾收集,存儲等的方式,以便編寫任何可能的內容。

這同樣適用於網絡。 它是一個分布式平台,但仍然是一個平台,了解底層結構的工作原理非常重要。 我顯然不會在這里詳細說明。 有關HTTP和相關技術的全部內容。 有關更多信息,我強烈建議您選擇像O'Reilly的HTTP:The Definitive Guide這樣的內容

至於你的問題,HTTP實現了各種“動詞”,其中最常見的是GET和POST。 簡單地說,GET是對要返回的資源的非易失性請求,而POST是易失性的(將進行更改,刪除資源等)。 使用GET沒有請求“正文”。 請求可以由各種部分,URL,標題和正文組成。 在POST中,發布的數據將構成請​​求正文,但GET沒有發布數據,因此沒有請求正文。 現在,再次,我們在這里簡單地說。 您可能想知道查詢字符串。 這不是“發布數據”嗎? 從技術上講,是的,它可以,但從技術上講,URL中的任何內容(或者如果我們真的想要確切地說,URI)都是現有資源的標識數據。 例如,當您在Google上進行搜索時,您的搜索查詢將附加到搜索結果頁的URI中。 發布的數據(您發布了查詢),但它不僅僅是數據,帶有查詢字符串的URI給出了與該確切查詢對應的資源的位置。 輸入相同查詢的其他人將被發送到同一個URL。

這有點像切線,但重要的是要理解查詢字符串不是傳遞無關數據的方法。 查詢字符串是URI的一部分,因此用兩個不同的查詢字符串加載的確切頁面是兩個完全不同的資源。

繼續前進,重定向不是某種特殊類型的請求(在由不同的HTTP動詞表示的意義上); 它只是對客戶端瀏覽器的指令,它應該向指定的URL發出另一個GET請求。 你無法控制使用的動詞:它始終是GET。 所以,你不能通過任何東西來騎。 如果你有被重定向到的URI表示的對象,那么很明顯你會使用URI路徑和/或查詢字符串傳遞檢索它們所需的識別信息(id,slug等)。 如果有任何數據與所表示的資源沒有直接關系,那么該數據必須存在於其他類型的存儲系統中,例如會話。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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