调用 get 操作时未设置 ViewBag 属性
ViewBag property not getting set when get action is called
在 MVC 项目中,首先是 EF DB,我使用 ViewBag 属性 在下拉列表中显示值列表。这是我的 get 方法和相同的 post 方法。-
[ HttpGet]
public ActionResult Create()
{
using (var context = new AdventureWorksEntities())
{
ViewBag.Colors = new SelectList(context.Products.Select(a =>
a.Color).Distinct().ToList());
}
return View();
[HttpPost]
[ActionName("Create")]
public ActionResult CreatePost()
{
var producttocreate = new Product();
try
{
UpdateModel(producttocreate);
if (ModelState.IsValid)
{
using (var context = new AdventureWorksEntities())
{
context.Products.Add(producttocreate);
context.SaveChanges();
}
return RedirectToAction("Index");
}
return View(producttocreate);
}
catch(Exception e)
{
return View(producttocreate);
}
}
这里的 属性 ViewBag.Colors 是有问题的属性。当我在 Post 上遇到异常时,我想再次传递模型和 return 相同的创建视图。但是,即使每次调用 Create Get 方法时我都有设置 ViewBag.Colors 的代码,但它没有被设置,并且在渲染 Create View 时出现错误 -
具有键 'Color' 的 ViewData 项是 'System.String' 类型,但必须是 'IEnumerable' 类型。
我确实在其他一些 post 中发现了这个异常的原因是 ViewBag.Colors 是 null ,但我不明白为什么。为什么在从 Post 操作方法调用视图时没有设置?解决这个问题的方法是什么?
之前
return View(producttocreate);
喜欢这个
ViewData["Colors"] = new SelectList(_context.Products, "Id", "Color", ColorId);
ViewBag.Colors
为空的原因是当 POST 中出现错误时,您没有重定向到 (GET) 创建操作。相反,您将模型发送回视图,绕过 (GET) 创建操作,因此不会填充 ViewBag。如果您使用 RedirectToAction("Create");
而不是 View(producttocreate)
,则会再次填充 ViewBag.Colors。
在 MVC 项目中,首先是 EF DB,我使用 ViewBag 属性 在下拉列表中显示值列表。这是我的 get 方法和相同的 post 方法。-
[ HttpGet]
public ActionResult Create()
{
using (var context = new AdventureWorksEntities())
{
ViewBag.Colors = new SelectList(context.Products.Select(a =>
a.Color).Distinct().ToList());
}
return View();
[HttpPost]
[ActionName("Create")]
public ActionResult CreatePost()
{
var producttocreate = new Product();
try
{
UpdateModel(producttocreate);
if (ModelState.IsValid)
{
using (var context = new AdventureWorksEntities())
{
context.Products.Add(producttocreate);
context.SaveChanges();
}
return RedirectToAction("Index");
}
return View(producttocreate);
}
catch(Exception e)
{
return View(producttocreate);
}
}
这里的 属性 ViewBag.Colors 是有问题的属性。当我在 Post 上遇到异常时,我想再次传递模型和 return 相同的创建视图。但是,即使每次调用 Create Get 方法时我都有设置 ViewBag.Colors 的代码,但它没有被设置,并且在渲染 Create View 时出现错误 -
具有键 'Color' 的 ViewData 项是 'System.String' 类型,但必须是 'IEnumerable' 类型。
我确实在其他一些 post 中发现了这个异常的原因是 ViewBag.Colors 是 null ,但我不明白为什么。为什么在从 Post 操作方法调用视图时没有设置?解决这个问题的方法是什么?
之前
return View(producttocreate);
喜欢这个
ViewData["Colors"] = new SelectList(_context.Products, "Id", "Color", ColorId);
ViewBag.Colors
为空的原因是当 POST 中出现错误时,您没有重定向到 (GET) 创建操作。相反,您将模型发送回视图,绕过 (GET) 创建操作,因此不会填充 ViewBag。如果您使用 RedirectToAction("Create");
而不是 View(producttocreate)
,则会再次填充 ViewBag.Colors。