c# - post方法中ViewBag值变成null?

标签 c# asp.net asp.net-mvc asp.net-mvc-5

我在编辑获取方法中有以下代码。

public async Task<ActionResult> Edit(int? id)
{
    Event e = await db.Events.FindAsync(id);
    ViewBag.OldCategories = e.Categories.ToList(); 
    // ViewBag.OldCategories is not null (tested in VS quick viewer)

我在 post 方法中有以下代码。

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Edit([Bind(Include = "Id,....,Categories")] EventCreateViewModel eventVm)
{
    var oldCategories = ViewBag.OldCategories; // Null

但是,在 post 方法中 oldCategories 始终为 null。我错过了什么吗?

最佳答案

ViewBag 仅当您从 Controller 设置时才能在 View 中访问,当表单发布时 ViewBag 值将被删除,如果您希望在表单发布中可以访问这些值,您可以通过隐藏字段发布它们。

<input type="hidden" name="MyHidden" value="@ViewBag.AnyKey"/>

或者其他方法是使用TempData,而不是放置在viewbag中,而是将数据放置在TempData中,并记住TempData是一次读取,意味着一旦你读取了它的值将从TempData中删除,您可以通过调用TempData.Keep()来保留它

public ActionResult MyAction()
{
 TempData["myKey"] = "";
}

并查看:

@{

string value = TempData["myKey"] as stirng;

TempData.Keep("myKey") // retains value in TempData

}

关于c# - post方法中ViewBag值变成null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22990443/

相关文章:

html - 创建我自己的 HTML Helper 时遇到问题

c# - 如何设置超时网格或存储在 Ext.Net

asp.net - 当文档模式为 Edge 时,IE11 中的 ReportViewer 高度问题

c# - 为什么我的 GridView CommandField 中有一个有趣的 "block"?

asp.net - asp.net mvc 页面上输出奇怪的字符

c# - 如何在 ASP.NET MVC 中浏览服务器上的文件?

asp.net-mvc - 为什么 ASP.NET MVC 默认 Model Binder 很慢?它需要很长时间才能完成工作

c# - 为什么 C# 中的命名空间允许循环依赖?

c# - 是否有用于 Pow(decimal, decimal) 的数学 API

c# - 使用委托(delegate)和事件从另一个表单更新表单