ASP.NET MVC自定义验证错误消息

时间:2019-03-20 09:33:28

标签: c# asp.net-mvc validation

因此,我实现了一些自定义验证,以防止类似的记录输入到数据库中。我唯一的问题是,它不是向用户显示错误/验证消息,而是显示错误页面。

我要去哪里错了?还是我该如何正确实现呢?

验证:

 public class ValidSimilarRequests : ValidationAttribute
{
    private LotusWorksEntities db = new LotusWorksEntities();
    protected override ValidationResult
            IsValid(object value, ValidationContext validationContext)
    {




        var model = (Models.HolidayRequestForm)validationContext.ObjectInstance;

        int empID = Convert.ToInt32(model.EmployeeID);

        DateTime _startdate = Convert.ToDateTime(model.StartDate);
        DateTime _finishdate = Convert.ToDateTime(model.FinishDate);


        var holidayexist = db.HolidayRequestForms.Any( x => x.EmployeeID==empID && x.StartDate <= _startdate && x.FinishDate >= _finishdate ); 

        if (holidayexist)
        {
            return new ValidationResult

                ("A holiday Request for this date range has already been requested");
        }


        else
        {
            return ValidationResult.Success;
        }


    }
}

型号:

  public partial class HolidayRequestForm
{
    public int RequestID { get; set; }

    [ValidSimilarRequests(ErrorMessage =
        "A holiday Request for this date range has already been requested")]
    public int EmployeeID { get; set; }

    [ValidSameWeek(ErrorMessage =
       "Holiday Request Must be made on a weekly Period")]
    [DisplayFormat(DataFormatString = "{0:dd/MMM/yy}", ApplyFormatInEditMode = true)]
    public System.DateTime StartDate { get; set; }

    [ValidStartFinishDate(ErrorMessage =
        "Finish Date can not be Greater than Start date.")]
    [DisplayFormat(DataFormatString = "{0:dd/MMM/yy}", ApplyFormatInEditMode = true)]
    public System.DateTime FinishDate { get; set; }

    [Range(0.0001, int.MaxValue, ErrorMessage = "Hours Requested must be greater than zero. ")]
    public decimal HoursTaken { get; set; }
    public string Comments { get; set; }
    public int YearCreated { get; set; }
    public int MonthCreated { get; set; }
    public int DayCreated { get; set; }
    public Nullable<int> YearOfHoliday { get; set; }
    public Nullable<bool> Approved { get; set; }
    public string SubmittedBy { get; set; }
    public string ApprovedBy { get; set; }
    public Nullable<int> WorkWeek { get; set; }
    public Nullable<int> MonthOfHoliday { get; set; }

    public virtual Employee Employee { get; set; }
}

错误页面显示:

一个或多个实体的验证失败。有关更多详细信息,请参见“ EntityValidationErrors”属性。

控制器:

  [Authorize(Roles = "Admin,User,SuperUser")]
    public ActionResult Create()
    {

        ViewBag.EmployeeID = new SelectList(db.Employees, "EmployeeID", "FullName");
        return View();

        string name = Session["Name"].ToString();

        var EmployeeIDCatch = db.Employees.Where(s => s.Email.Equals(name)).Select(s => s.EmployeeID);

    }

    // POST: HolidayRequestForms/Create
    // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
    // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create([Bind(Include = "RequestID,StartDate,FinishDate,HoursTaken,Comments,YearCreated,MonthCreated,DayCreated,YearOfHoliday,Approved,SubmittedBy,ApprovedBy")] HolidayRequestForm holidayRequestForm)
    {
        if (ModelState.IsValid)
        {

            if (Session["Name"] == null)
            {
                TempData["msg"] = "Your Session Expired - Please Login";
                return RedirectToAction("Login", "Account");
            }

            string name = Session["Name"].ToString();

            var employeeID = db.Employees.Where(s => s.Email.Equals(name)).Select(s => s.EmployeeID).FirstOrDefault();
            holidayRequestForm.EmployeeID = employeeID;

            var submittedby = db.Employees.Where(s => s.Email.Equals(name)).Select(s => s.Email).FirstOrDefault();
            holidayRequestForm.SubmittedBy = submittedby;

            //Saves changes and begins Email Actions 
            db.HolidayRequestForms.Add(holidayRequestForm);
            db.SaveChanges();
            SendMailToAreaManager();
            SendMailToManager();
            SendMailToAdmin();
            return RedirectToAction("Index", "Calendar");
        }

        ViewBag.EmployeeID = new SelectList(db.Employees, "EmployeeID", "FullName", holidayRequestForm.EmployeeID);
        return View(holidayRequestForm);
    }

查看:

 @model HolidayTracker.Models.HolidayRequestForm

    

    <div>
        <div class="col-md-12">
            @using (Html.BeginForm())
            {
                @Html.AntiForgeryToken()


                <h2 align="center">Holiday Request Form</h2>
                <hr />
                @Html.ValidationSummary(true, "", new { @class = "text-danger" })



                <div class="form-group">
                    @Html.LabelFor(model => model.StartDate, "Start Date", htmlAttributes: new { @class = "control-label col-md-2" })
                    <div class="col-md-10">
                        @Html.EditorFor(model => model.StartDate, "Start Date", new { htmlAttributes = new { @class = "form-control", @style = "width:400px", autocomplete = "off" } })
                        @Html.ValidationMessageFor(model => model.StartDate, "", new { @class = "text-warning" })
                        <p id="warning" style="color:orange"></p>
                    </div>
                </div>

                <div class="form-group">
                    @Html.LabelFor(model => model.FinishDate, "Finish Date", htmlAttributes: new { @class = "control-label col-md-2" })
                    <div class="col-md-10">
                        @Html.EditorFor(model => model.FinishDate, new { htmlAttributes = new { @class = "form-control",@style = "width:400px", autocomplete = "off" } })
                        @Html.ValidationMessageFor(model => model.FinishDate, "", new { @class = "text-danger" })
                        <p id="warningFD" style="color:orange"></p>
                    </div>
                </div>

                <div class="form-group">
                    @Html.LabelFor(model => model.HoursTaken, "Hours Requested", htmlAttributes: new { @class = "control-label col-md-2" })
                    <div class="col-md-10">
                        @Html.EditorFor(model => model.HoursTaken, new { htmlAttributes = new { @class = "form-control", @style = "width:400px" } })
                        @Html.ValidationMessageFor(model => model.HoursTaken, "", new { @class = "text-danger" })
                    </div>
                </div>

                <div class="form-group">
                    @Html.LabelFor(model => model.Comments, htmlAttributes: new { @class = "control-label col-md-2"})
                    <div class="col-md-10">
                        @Html.TextAreaFor(
             model => model.Comments,
   new { placeholder = "Enter Dates and how many Hours per Date Here.                                                  ", style = "width: 400px; height: 200px;" })
                        @Html.ValidationMessageFor(model => model.Comments, "", new { @class = "text-danger" })
                    </div>

                </div>



                <div class="form-group">
                    <div class="col-md-offset-2 col-md-10">
                        <input type="submit" value="Submit" class="btn btn-warning" />
                    </div>



                </div>

            }
        </div>


    </div>











</div>

0 个答案:

没有答案