我在编辑获取方法中有以下代码。
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/