Asp.net mvc 验证失败时MVC Captcha ViewBag null(ModelState.IsValid)
我正在尝试实现验证码,我注意到当modelstate的计算结果为无效时,我的页面会出现错误,并显示消息“我的所有viewbag.items现在都为null”。你知道怎么解决这个问题吗 因此,我有一个控制器,它向我的视图发送多个viewbag项目。例如,类似这样的事情:Asp.net mvc 验证失败时MVC Captcha ViewBag null(ModelState.IsValid),asp.net-mvc,Asp.net Mvc,我正在尝试实现验证码,我注意到当modelstate的计算结果为无效时,我的页面会出现错误,并显示消息“我的所有viewbag.items现在都为null”。你知道怎么解决这个问题吗 因此,我有一个控制器,它向我的视图发送多个viewbag项目。例如,类似这样的事情: public ActionResult Create() { ...(code shortened)... var IVariable = from i in db.SomeTable select i;
public ActionResult Create()
{
...(code shortened)...
var IVariable = from i in db.SomeTable
select i;
foreach (var x in IVariable)
{
BagCategory.Add(x.ArmyCategory);
}
Viewbag.BagCategory = BagCategory
}
[HttpPost]
[ValidateAntiForgeryToken]
[CaptchaValidation("CaptchaCode", "SampleCaptcha", "Incorrect CAPTCHA code!")]
public ActionResult Create([Bind(Include="ID,ItemName,Price,ArmyCategory,Race,Company,PictureLink,Notes,EmailAddress")] Sell sell)
{
if (ModelState.IsValid)
{
db.ItemsOffered.Add(sell);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(sell);
}
POST方法如下所示:
public ActionResult Create()
{
...(code shortened)...
var IVariable = from i in db.SomeTable
select i;
foreach (var x in IVariable)
{
BagCategory.Add(x.ArmyCategory);
}
Viewbag.BagCategory = BagCategory
}
[HttpPost]
[ValidateAntiForgeryToken]
[CaptchaValidation("CaptchaCode", "SampleCaptcha", "Incorrect CAPTCHA code!")]
public ActionResult Create([Bind(Include="ID,ItemName,Price,ArmyCategory,Race,Company,PictureLink,Notes,EmailAddress")] Sell sell)
{
if (ModelState.IsValid)
{
db.ItemsOffered.Add(sell);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(sell);
}
在我看来,我浏览了viewbag.BagCategory中的项目,但当验证码失败并导致网站爆炸时,它现在为空。我能做些什么来解决这个问题
多谢各位 在后期操作中,您必须重新填充Viewbag.BagCategory,因为现在当模型无效时,您将返回没有Viewbag的视图
{
if (ModelState.IsValid)
{
db.ItemsOffered.Add(sell);
db.SaveChanges();
return RedirectToAction("Index");
}
////REPOULATE THE BagCategory HERE
return View(sell);
}
谢谢实际上,我只是将整个prepost create方法复制到了(!modelstate.isvalid)部分,它可以正常工作。注意:这篇文章有一个被拒绝的“过于激进”的编辑: