我正在研究的是一个时间报告系统,只是为了更好地挂起asp.net mvc5和javascript等。
这是我的看法:
如果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.");
}
}
}
答案 0 :(得分:1)
不是只返回视图,而是使用这样的模型返回视图 返回视图(模型);
检查以下链接以获取您的代码 http://www.codeproject.com/Articles/710702/ASP-NET-MVC-Server-Side-Validation