Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.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
C# MVC4模型状态无效_C#_Asp.net_Asp.net Mvc 4 - Fatal编程技术网

C# MVC4模型状态无效

C# MVC4模型状态无效,c#,asp.net,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc 4,我在mvc4+EF6项目中发布时遇到问题。视图中的模型将填充除年份和期间之外的所有字段,这些字段是下拉列表字段。在附着到视图的视图模型中,未将“年份”和“期间”字段设置为DataAnnotation所必需的字段。但是,当我尝试发布时,ModelState无效 如何确定ModelState无效的原因 见下面的代码: HTML: 控制器代码: [HttpPost] [ValidateAntiForgeryToken] public ActionResult Edit([Bind(In

我在mvc4+EF6项目中发布时遇到问题。视图中的模型将填充除年份和期间之外的所有字段,这些字段是下拉列表字段。在附着到视图的视图模型中,未将“年份”和“期间”字段设置为DataAnnotation所必需的字段。但是,当我尝试发布时,ModelState无效

如何确定ModelState无效的原因

见下面的代码:

HTML:

控制器代码:

[HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit([Bind(Include = "StartDate, CloseDate, Id, Status")] EditCycle cycleUpdate, string Year, string Period)
    {
        try
        {
            if (ModelState.IsValid)
            {
                int yearPost = Int32.Parse(Year);
                string periodPost = Period.Trim();
                switch (periodPost)
                {
                    case "1":
                        periodPost = yearPost.ToString() + " - H1";
                        break;
                    case "2":
                        periodPost = yearPost.ToString() + " - H2";
                        break;
                    default:
                        return View(cycleUpdate);
                }
                int pf = Int32.Parse(User.Identity.Name.Substring(8));

                cycleUpdate.Year = yearPost;
                cycleUpdate.Period = periodPost;
                if (this.repo.EditCycle(cycleUpdate, pf))
                {
                    return View("Index");
                }
                else
                {
                    List<CyclePeriod> period = new List<CyclePeriod>{
                        new CyclePeriod {Id=1, Title="First Half : January 1 - June 30"},
                        new CyclePeriod {Id=2, Title="Second Half : July 1 - December 31"}
                    };

                    int[] years = new int[5];
                    for (int i = (DateTime.Now.Year - 2), j = 0; i <= (DateTime.Now.Year + 2); i++, j++)
                    {
                        years[j] = i;
                    }

                    ViewBag.Years = years;
                    ViewBag.Period = period;

                    return View(cycleUpdate);
                }
            }
            else
            {
                List<CyclePeriod> period = new List<CyclePeriod>{
                    new CyclePeriod {Id=1, Title="First Half : January 1 - June 30"},
                    new CyclePeriod {Id=2, Title="Second Half : July 1 - December 31"}
                };

                int[] years = new int[5];
                for (int i = (DateTime.Now.Year - 2), j = 0; i <= (DateTime.Now.Year + 2); i++, j++)
                {
                    years[j] = i;
                }

                ViewBag.Years = years;
                ViewBag.Period = period;

                return View(cycleUpdate);
            }
        }
        catch (Exception)
        {
            List<CyclePeriod> period = new List<CyclePeriod>{
                    new CyclePeriod {Id=1, Title="First Half : January 1 - June 30"},
                    new CyclePeriod {Id=2, Title="Second Half : July 1 - December 31"}
                };

            int[] years = new int[5];
            for (int i = (DateTime.Now.Year - 2), j = 0; i <= (DateTime.Now.Year + 2); i++, j++)
            {
                years[j] = i;
            }

            ViewBag.Years = years;
            ViewBag.Period = period;

            return View(cycleUpdate);
        }
    }

如果年份和期间的类型为int,这意味着它们不能为null,因此需要。为了避免这种情况,您必须使用int?可空的

如果年份和期间的类型为int,这意味着它们不能为空,因此需要。为了避免这种情况,您必须使用int?可为空

我同意蒂比的观点。您可能希望使用可为空的类型

如何确定ModelState无效的原因

这将为您提供一个键列表,这些键是模型中的属性名称,以及ModelState中的错误:

var errors = ModelState.Where(x => x.Value.Errors.Any())
                .Select(x => new { x.Key, x.Value.Errors });

我同意提比的观点。您可能希望使用可为空的类型

如何确定ModelState无效的原因

这将为您提供一个键列表,这些键是模型中的属性名称,以及ModelState中的错误:

var errors = ModelState.Where(x => x.Value.Errors.Any())
                .Select(x => new { x.Key, x.Value.Errors });

您可以在ModelState对象中检查包含collectionOr的属性error,或者在视图中放置ValidationSummary,以便查看错误消息。您可以在ModelState对象中检查包含collectionOr的属性error,或者在视图中放置ValidationSummary,以便查看错误消息。不可为null的int不会导致所需的验证器将字段标记为无效。对于值类型,模型值已经是defaultT。不可为null的int不会导致所需的验证器将该字段标记为无效。对于值类型,模型值已经是默认值。最后找出了我的错误,谢谢,这节省了我的时间!完美的解决方案@B先生。你节省了我很多的时间。最后终于发现了我的错误,谢谢,这挽救了我的一天!完美的解决方案@B先生。你帮我节省了很多时间。