Asp.net-Mvc

表單發布後如何保存 ViewBag 數據?

  • May 17, 2016

所以我有一個ViewBag.Something,這個數據是隨機生成的。在我看來,我將它設置為這樣的標籤@Html.LabelFor(m => m.Something, (string)ViewBag.Something)。這很好,但是當我送出表單時可能會出現錯誤,如果有錯誤,我需要這個標籤保持不變,我不再想要動態/隨機數據,所以我不會呼叫生成的控制器方法這個 ViewBag。有沒有辦法在我的控制器中沒有一些私有變數的情況下保留這個值?MVC/Razor 的一些好方法?

在 get 中,設置一個模型,動態設置它,並在return view()執行時執行return view(model). 然後在視圖中,設置一個隱藏欄位,可以繼續傳遞所需的值。我選擇走這條路是因為我不必擔心任何伺服器程式碼來使這項工作在文章上執行,而且我不必擔心任何會話。

選項1:

使用路由值將“ViewBag.Something”的值傳遞給控制器:

@Html.ActionLink("ButtonText", "ActionName", new { Something = @ViewBag.Something })

選項 2:您可以使用TempData

public ActionResult Index()
{
var Something = "YOURVALUE";
TempData["Something"] = Something;
.......
}


public ActionResult OtherAction()
{
   var Something = TempData["Something "];
   ...........
}

在動作方法之間傳遞狀態

操作方法可能必須將數據傳遞給另一個操作,例如,如果在發布表單時發生錯誤,或者該方法必須重定向到其他方法,例如當使用者被定向到登錄視圖然後返回到原來的動作方法。

動作方法可以在呼叫控制器的 RedirectToAction 方法呼叫下一個動作之前將數據儲存在控制器的 TempDataDictionary 對像中。TempData 屬性值儲存在會話狀態中。在設置 TempDataDictionary 值之後呼叫的任何操作方法都可以從對像中獲取值,然後處理或顯示它們。TempData 的值會一直存在,直到它被讀取或會話超時。以這種方式持久化 TempData 可以實現重定向等場景,因為 TempData 中的值在單個請求之外可用。

引用自:https://stackoverflow.com/questions/10997681