• 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" />

    <% } %>

    结果

     

  • 相关阅读:
    json to dictionary
    ie下 频繁异步加载导致崩溃
    如何实现数据在表内部置顶
    js货币转换,replaceAll写法
    js奇怪的问题
    mssql中public和db_owner权限下拿到webshell或者系统权限
    关于Alexa Toolbar的破解方法
    如何备份和还原 IIS
    WIN下IIS备份与恢复操作
    汽车品牌标志数据库
  • 原文地址:https://www.cnblogs.com/wusong/p/1971116.html
Copyright © 2020-2023  润新知