Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 验证失败时MVC Captcha ViewBag null(ModelState.IsValid)_Asp.net Mvc - Fatal编程技术网

Asp.net mvc 验证失败时MVC Captcha ViewBag null(ModelState.IsValid)

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;

我正在尝试实现验证码,我注意到当modelstate的计算结果为无效时,我的页面会出现错误,并显示消息“我的所有viewbag.items现在都为null”。你知道怎么解决这个问题吗

因此,我有一个控制器,它向我的视图发送多个viewbag项目。例如,类似这样的事情:

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)部分,它可以正常工作。注意:这篇文章有一个被拒绝的“过于激进”的编辑: