优秀的编程知识分享平台

网站首页 > 技术文章 正文

asp.net mvc 表单后端验证(web表单验证代码)

nanyue 2024-07-30 03:41:32 技术文章 5 ℃

做BS系统的都知道,表单验证涉及到前端验证和后端验证。因为我所使用的是Bootstrap框架,所以前端验证,我使用的bootstrapValidator这个验证框架,提一名这个框架有点老了。官网已不维护了,他们已经做了一个新的验证框架,更加的强大,但要收费了。

我下面简述一下ASP.NET MVC的表单后端验证。

1.在Model中,通过特性给每个属性增加一些需要验证的逻辑。如下代码中的

[Required(ErrorMessage ="工作日期不能为空")]

则是需要该属性提交到服务器时不为空值 。

public partial class ui_work_note
    {
        public int id { get; set; }
        [Display(Name="工作日期")]
        [DisplayFormat(DataFormatString ="{0:yyyy-MM-dd}",ApplyFormatInEditMode =true)]
        [DataType(DataType.Date)]
        [Required(ErrorMessage ="工作日期不能为空")]
        public Nullable<System.DateTime> WorkDate { get; set; }

        public Nullable<int> WorkStatus { get; set; }

        [Display(Name = "工作时长")]
        [Required(ErrorMessage = "工作时长不能为空")]
        public Nullable<decimal> WorkTime { get; set; }

        [Display(Name = "工作内容")]
        [Required(ErrorMessage = "工作内容不能为空")]
        public string WorkContent { get; set; }

        [Display(Name = "工作详情")]
        [Required(ErrorMessage = "工作详情不能为空")]
        public string WorkNote { get; set; }

        public string CreateId { get; set; }
        public Nullable<System.DateTime> CreateDate { get; set; }
        public string UpdateId { get; set; }
        public Nullable<System.DateTime> UpdateDate { get; set; }
        public string WorkRef1 { get; set; }
        public string WorkRef2 { get; set; }
        public string WorkRef3 { get; set; }
        public string WorkRef4 { get; set; }
        public string WorkRef5 { get; set; }
    }

2.在Control中,需要使用验证方法进行验证。如下代码所述。

在方法中使用ModelState.IsValid进行验证。

[HttpPost]
        public ActionResult update([Bind(Include = "id,WorkDate,WorkTime,WorkContent,WorkNote")] ui_work_note uiWorkNote)
        {
            if (ModelState.IsValid)
            {
                ui_work_note uiWorkNoteTemp = new ui_work_note();
                using (HrEntities hr=new HrEntities())
                {
                    uiWorkNoteTemp = (from workNote in hr.ui_work_note
                                      where workNote.id == uiWorkNote.id
                                      select workNote).FirstOrDefault<ui_work_note>();
                    uiWorkNoteTemp.WorkDate = uiWorkNote.WorkDate;
                    uiWorkNoteTemp.WorkTime = uiWorkNote.WorkTime;
                    uiWorkNoteTemp.WorkContent = uiWorkNote.WorkContent;
                    uiWorkNoteTemp.WorkNote = uiWorkNote.WorkNote;
                    hr.SaveChanges();                    
                    return RedirectToAction("index");
                }
            }
            return View(uiWorkNote);            
        }

3.View中,需要使用在第一步的模型文件。在View文件中,首行,加上如下代码

@model ui_work_note

其中 ui_work_note是第一步中的类名。

在表单处使用Razor的语法,如下:

<div class="form-group">
        <div class="row">
            <div class="col-md-2">
                @Html.LabelFor(m => m.WorkDate, new { @class = "control-label" })
            </div>
            <div class="col-md-5">
                <div class="input-group date">                    
                    @Html.TextBoxFor(m => m.WorkDate, "{0:yyyy-MM-dd}", new { @class = "form-control", id = "WorkDate", name = "WorkDate", placeholder = "工作日期" })
                    <span class="input-group-addon"><i class="glyphicon glyphicon-th"></i></span>
                </div>
            </div>
        </div>
    </div>
@Html.ValidationMessageFor(m => m.WorkDate)

注意上面这条语句,这条语句,会将在第一步中设置的不满足条件时的提示信息带到前端页面上。但其实,我验证过了,不要这条语句,亦不影响后端验证,只不过没有前端提示了。

因为,我使用了前面所述的前端验证框架,所以可以不加上面这条语句。而直接使用自己心仪的前端验证框架。这样前端和后端分得更开了。我以为。

Tags:

最近发表
标签列表