asp.net验证userinput但保留字段

时间:2015-09-17 06:52:26

标签: javascript c# asp.net

我正在研究的是一个时间报告系统,只是为了更好地挂起asp.net mvc5和javascript等。 这是我的看法: enter image description here

如果Timmar:在Projekt 1上与“Tid Jobbad:”不匹配,它将被发送到后端并检查以确保时间正确。如果他们没有加起来,我会返回如下错误消息:

ModelState.AddModelError("hours_" + project.First(), "Antalet timmar stämmer ej överrens.");

但这也意味着我的视图被重置为原始状态,但我想要做的是我想保留我输入的所有字段并仍然收到错误消息。

我想我可以编写一个javascript来执行此检查,但是让Javascript做这样的检查是个好主意,因为你可以篡改它相当容易吗?

这是我的控制器以及我目前如何验证时间。

private NewTimeReportModel ReportDates(FormCollection form, NewTimeReportModel projectData, List<string> dates, bool? noTimeToReport)
    {
        foreach (string date in dates)
        {
            DateTime reportDate;
            bool? noTime = noTimeToReport;

            if (!DateTime.TryParse(date, out reportDate))
            {
                ModelState.AddModelError("Date", "Inget datum valt");
            }
            else
            {
                var projectNumbers = (from x in form.AllKeys where x.Contains("_") select x.Substring(x.IndexOf('_'))).Distinct();

                projectData.Times = new TimeReportTimes(form["startTime"], form["endTime"], form["breakTime"], ModelState);
                projectData.Date = reportDate;

                //Will never be null.
                if (noTime != null)
                {
                    projectData.NoTimeToReport = (bool)noTime;

                    if (!(bool)noTime)
                    {
                        //Validates so the user put in the right amount of hours, and did chosoe a project.
                        ValidateUserInput(form, projectData, projectNumbers);

                        if (!string.IsNullOrEmpty(form["ReportId"]))
                        {
                            projectData.ReportId = Guid.Parse(form["ReportId"]);
                        }
                    }
                }

                if (ModelState.IsValid)
                {
                    //If we get this far everything is ok and we save the timereport to the database
                    projectData.SaveToDatabase(Constants.CurrentUser(User.Identity.Name));
                    ViewData["posted"] = true;
                    projectData = new NewTimeReportModel();
                }
                else if (projectData.Projects.Count == 1)
                {
                    projectData.Projects[0].Hours = null;
                }
            }
        }

        return projectData;
    }
    private void ValidateUserInput(FormCollection form, NewTimeReportModel projectData, IEnumerable<string> projectNumbers)
    {
        IEnumerable<string> project = projectNumbers as string[] ?? projectNumbers.ToArray();
        if (!project.Any())
        {
            ModelState.AddModelError("Projekt", "Inga projekt valda...");
        }
        else
        {
            int emptyHours = 0;
            foreach (string projectNumber in project)
            {
                projectData.Projects.Add(new NewTimeReportModel.Project
                {
                    Description = form["description" + projectNumber],
                    Hours = null,
                    ProjectId = Guid.Parse(form["project" + projectNumber])
                });

                string hourString = form["hours" + projectNumber];
                if (string.IsNullOrEmpty(hourString))
                {
                    emptyHours++;
                    int count = project.Count();
                    if (count > 1)
                    {
                        ModelState.AddModelError("hours_" + projectNumber, "Du måste skriva in tid på alla project.");
                    }
                    projectData.Projects[projectData.Projects.Count - 1].Hours = projectData.Times.WorkedHours;
                }
                else
                {
                    if (!projectData.Projects[projectData.Projects.Count - 1].SetHours(hourString))
                    {
                        ModelState.AddModelError("hours_" + projectNumber, "Felaktig antal timmar.");
                    }
                }
            }

            if (emptyHours > 1 || (emptyHours == 0 && projectData.Projects.Sum(x => x.Hours) != projectData.Times.WorkedHours))
            {
                ModelState.AddModelError("hours_" + project.First(), "Antalet timmar stämmer ej överrens.");
            }

            if (projectData.Projects.Any(x => x.Hours <= 0))
            {
                ModelState.AddModelError("hours_" + project.First(), "Antalet timmar jobbade måste vara större än noll.");
            }
        }
    }

1 个答案:

答案 0 :(得分:1)

不是只返回视图,而是使用这样的模型返回视图 返回视图(模型);

检查以下链接以获取您的代码 http://www.codeproject.com/Articles/710702/ASP-NET-MVC-Server-Side-Validation