zoukankan      html  css  js  c++  java
  • MVC 验证和异常处理 开篇及简单示例

    MVC 验证和异常处理 开篇及简单示例。

      背景: MVC 验证和异常处理参考Pro ASP.NET MVC2 Framerowk Seciond Edition.Pdf,将会有书中示例出现在随笔中,或者由于个人能力问题,和原文有偏差。纯属个人加强记忆的随笔。欢迎指正。

      开始第一篇 注册和 显示不合法验证信息

    MVC 用ModelState 存储Model在请求间发生的一系列信息,包括后台数据合法性验证 。让我们用一个例子来说明使用方法:

    后台定义个model和一个control

    public class Appointment

    {

        public string ClientName { get; set; }

        [DataType(DataType.Date)]

        public DateTime AppointmentDate { get; set; }

    }

    public ActionResult MakeBooking(Appointment appt, bool acceptsTerms) {

        if (string.IsNullOrEmpty(appt.ClientName))

            ModelState.AddModelError("ClientName", "Please enter your name");

        if (ModelState.IsValidField("AppointmentDate"))

        {

            // Parsed the DateTime value. But is it acceptable under our app's rules?

            if (appt.AppointmentDate < DateTime.Now.Date)

                ModelState.AddModelError("AppointmentDate", "The date has passed");

            else if ((appt.AppointmentDate - DateTime.Now).TotalDays > 7)

                ModelState.AddModelError("AppointmentDate",

                                         "You can't book more than a week in advance");

        }

        if (!acceptsTerms)

            ModelState.AddModelError("acceptsTerms", "You must accept the terms");

        if (ModelState.IsValid)

        {

            // To do: Actually save the appointment to the database or whatever

            return View("Completed", appt);

        }

        else

          return View(); // Re-renders the same view so the user can fix the errors

    重点在ModelState.AddModelError方法,主意它的参数,一个key,一条错误提示,key和view也就是aspx中的绑定的model属性名称一致。

    下面看view怎么显示异常信息

    最简单的方法是使用Html.ValidationSummary(),统一在某个地方显示所有异常信息。

    <h1>Book an appointment</h1>

    <%: Html.ValidationSummary() %>

    结果大致如图所示

     

    或者手工指定:

    <% using(Html.BeginForm()) { %>

        <p>

            Your name: <%: Html.EditorFor(x => x.ClientName) %>

            <%: Html.ValidationMessageFor(x => x.ClientName) %>

        </p>

        <p>

            Appointment date: 

            <%: Html.EditorFor(x => x.AppointmentDate)%>

            <%: Html.ValidationMessageFor(x => x.AppointmentDate) %>

        </p>

        <p>

            <%: Html.CheckBox("acceptsTerms") %>

            <label for="acceptsTerms">I accept the Terms of Booking</label>

            <%: Html.ValidationMessage("acceptsTerms") %>

        </p>

        

        <input type="submit" value="Place booking" />

    <% } %>

    结果

     

  • 相关阅读:
    昆石VOS3000_2.1.4.0完整安装包及安装脚本
    KVPhone,VOS官方的SIP软电话电脑客户端
    昆石VOS2009 VOS3000无漏洞去后门电脑管理客户端大全
    2017年最新(4月20日)手机号码归属地数据库分享
    2017年最新VOS2009/VOS3000最新手机号段导入文件(手机归属地数据)
    Android:onNewIntent()
    三星S4使用体验(Markdown版)
    apple公司的潮起潮落——浪潮之巅
    microsoft的罗马帝国——浪潮之巅
    我的iOS开发之路
  • 原文地址:https://www.cnblogs.com/wusong/p/1971116.html
Copyright © 2011-2022 走看看