簡體   English   中英

c# 將字符串從一個動作傳遞給另一個

[英]c# pass a string from an action to another

想象一個用戶可以更新、刪除、編輯甚至投票輸入的頁面。 由於每個動作將由不同的ActionResult處理,因此頁面的 url 將不得不更改以防出現錯誤。 我的問題很簡單:假設您的頁面是“ http://localhost/Input/ ”,當您出現一些錯誤時,我想重定向到“ http://localhost/Input/Error ”並顯示錯誤消息。 我不想為此使用會話,因此請不要向我顯示此鏈接 基本上,想要我這樣做是類似的:

public ActionResult Create(FormCollection form) { 
        try {
            // some code here
            return RedirectToAction("Index");
        }
        catch () {
             string errorMessage = "You have done something bad!"; 
             // and I want to pass this string to my Error Action.
             return RedirectToAction("Error"); 
        }
}

我用過的解決方案

我知道我說過我不想使用 TempData,但顯然這是最好的選擇,我已經用它來解決我的問題。 至於答案,我選擇了 DigBySwift 的答案,因為如果您不想將 Session 用於此類操作,這是您可以做的最合乎邏輯的事情。

正如您所說,如果您不想使用會話,那么 TempData 不是一個選項。 理想情況下,您應該盡量不要將錯誤消息傳遞到下一頁。 而是將錯誤消息存儲在資源文件中。

您可以將 id/enum 傳遞給下一頁,然后根據傳遞的參數檢索錯誤:

return RedirectToAction("Error", new { ErrorId = 4 });

public ActionResult Error(int errorId){ ... }

編輯:另一種選擇(因為考慮到數據庫寫入讀取會很昂貴)是將消息寫入cookie,然后在重定向后檢索它,然后刪除cookie。 這不是很好,我個人不會使用它。 但如果您需要自定義消息,這是一個選項。

是否可以選擇從發件人頁面將錯誤消息保存在數據庫中並將其返回到其他頁面? 我知道它與上面發布的類似,但它會更加動態,因為您不需要將消息放入資源文件中,您可以將錯誤消息保存在數據庫中並在其他頁面上獲取

我想建議一種替代方法。 我使用 AJAX 來執行這些類型的操作,因此我可以返回一個視圖,或者大部分來自我的 controller 的部分視圖,而不是將用戶重定向到另一個視圖。 因此,我可以使用ViewBag在我的視圖中使用該字符串消息。

public ActionResult Create(FormCollection form) { 
    try {
        // some code here
        return View('CreationSuccess');
    }
    catch () {
         ViewBag.errorMessage = "You have done something bad!"; 
         // and I want to pass this string to my Error Action.
         return View('CrudError');
    }
}

暫無
暫無

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

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