MVC自學第四課


  • 處理表單

前面的列子我們已經把表單提交給了HomeControllers類中的RsvpForm動作方法,只是在這個動作方法內,我們並沒有做什么具體的邏輯處理,而是直接返回一個

“Thanks”的視圖。
 return View("Thanks", studentResponse);
這個View方法的調用告訴MVC,查找並渲染一個名為“Thanks”的視圖,並把studentResponse對象傳遞給視圖。現在項目中還沒有這個視圖,這里創建Thanks視圖,怎么創建就不用再說了。如下所示
QQ截圖20130819211300
Thanks視圖的代碼如下
@model PartyInvites.Models.StudentResponse

@{
    Layout = null;
}


<html>
<head>
    <title>Thanks</title>
</head>
<body>
    <p>謝謝您!,@Model.Name!</p>
    @if (Model.HavingGet==true)
    {
        @:很高心您已經收到了錄取通知書!
    }
    else
    {
        @:不好意思!您還沒有收到錄取通知書!我們會盡快核對,並通知您!
    }
</body>
</html>
這里的Thanks視圖使用Razor來顯示基於StudentResponse屬性的內容,這是我們在RsvpForm動作方法中傳遞給視圖的。Razor的@model操作符指示了這個強類型視圖的域模型類型。為了訪問這個域對象中某個屬性的值,我們使用Model.<屬性名>。列如獲得Name屬性的值,調用Model.Name。這里對Razor語法大家肯定會不熟悉,后面我們在來慢慢研究它。
至此我們可以運行這個程序來看一下結果
QQ截圖20130819212732
  • 添加驗證

現在,到了把驗證添加到應用程序的時候了。如果不做這件事,用戶可能會出入無意義的數據,甚至遞交一個空白表單。

在MVC應用程序中,驗證被典型地運用於域(模型,MVC中M)模型,而不是在用戶界面上。這意味着,在一個地方定義驗證條件,會在任何運用模型類的地方生效。ASP.NET MVC支持驗證規則聲明,驗證規則是以System.ComponentModel.DataAnnotations命名空間中的注解屬性進行定義的。下面演示了如何把注解的屬性運用於StudentResponse模型類。

 

using System.ComponentModel.DataAnnotations;
namespace PartyInvites.Models
{
    public class StudentResponse
    {
        [Required(ErrorMessage = "請輸入您的姓名!")]
        public string Name { get; set; }
        [Required(ErrorMessage = "請輸入您的手機號碼!")]
        public string Mobile { get; set; }
        [Required(ErrorMessage = "請輸入您的郵箱!")]
        [RegularExpression(".+\\@.+\\..+", ErrorMessage = "郵箱格式不正確!")]
        public string Email { get; set; }
        [Required(ErrorMessage = "請確定您是否已收到錄取通知書!")]
        public bool? HavingGet { get; set; }
    }
}

如何使用呢?可以在控制器類中使用ModelState.IsValid屬性來檢查是否有驗證問題。如下所示演示了在處理POST的RsvpForm動作方法中如何運用ModelState.IsValid.

[HttpPost]
        public ViewResult RsvpForm(StudentResponse  studentResponse)
        {
            if (ModelState.IsValid)
            {
                //TODO:發送studentResponse 郵件給學校
                return View("Thanks", studentResponse);
            }
            else
            {
                //有驗證錯誤--重新顯示表單
                return View();
            }
           
        }

如果沒有驗證錯誤,就會同之前那樣,告訴MVC渲染Thanks視圖;如果有驗證錯誤,則通過調用不帶參數的View方法來重新渲染視圖。

我們需要把驗證錯誤信息顯示給用戶,通過在提交表單的視圖中使用Html.ValidationSummary 輔助器方法,如下所示

<body>

@using(Html.BeginForm()){

@Html.ValidationSummary()

<p>您的名字:@Html.TextBoxFor(m => m.Name)</p>
<p>您的郵箱:@Html.TextBoxFor(m => m.Email)</p>
……

}

如果沒有錯誤,這個Html.ValidationSummary方法會在表單中創建一個隱藏的列表條目占位符;否則,MVC會使這個占位符稱為可見,並添加由驗證注解屬性定義的錯誤消息。如下所示

QQ截圖20130819220007

知道我們用於StudentResponse類的所有驗證約束都得到滿足,用戶才會看到Thanks視圖。注意,我們在表單中輸入的數據是被保留的,並且,當帶有驗證摘要的視圖被重新渲染時,被再次顯示出來(這個有點象傳統的ASP.NET Web Form)。這是我們通過模型綁定所得到的好處。

到這里一個簡單的小應用程序基本算是完成了。

通過這幾課的學習,我們對MVC有了大概的了解。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM