วันจันทร์ที่ 11 เมษายน พ.ศ. 2559

ตอนที่ 2

     สร้างคอนโทรลเลอร์ใหม่ขึ้นมารองรับรีวิวคอร์สอบรม โดยไปที่ Solution Explorer คลิกขวาที่โฟลเดอร์ Controllers > Add > Controller และตั้งชื่อคอนโทรลเลอร์นี้ว่า ReviewsController พร้อมกับเลือกใช้ Template “MVC controller with empty read/write actions” และคลิก Add
 MVC4_08_01
 MVC4_08_02
จากนั้น โปรแกรม Visual Studio จะสร้างคอนโทรลเลอร์ ReviewsController ขึ้นจากเทมเพลตดังรูปข้างล่าง ซึ่งประกอบด้วยเมธอด Index เป็นดีฟอลต์แอ็กชั่น ตลอดจนเมธอด Details, Create, Edit และ Delete ที่ท่านสามารถเพิ่มเนื้อหาโค้ดได้ตามใจชอบ
 MVC4_08_03
ปกติแล้วเราจะใช้แอ็กชั่น Index ในการสั่งแสดงรายการรีวิวทุกอย่างๆ ออกมา แต่ตอนนี้ เรายังขาดโมเดลที่เอาไว้ represent ชุดรายการรีวิว จึงต้องสร้างคลาสของโมเดลใหม่ โดยไปที่ Solution Explorer คลิกขวาที่โฟลเดอร์ Models > Add > Class ตั้งชื่อคลาสว่า CourseReview และคลิก Add
MVC4_08_04
MVC4_08_05
โปรแกรม Visual Studio ก็จะสร้างไฟล์ CourseReview.cs ขึ้นมา
 MVC4_08_06
เนื่องจากต่อไป เว็บแอพพลิเคชันนี้จะต้องเชื่อมต่อกับดาต้าเบส เราจึงต้องกำหนดพร็อพเพอร์ตี้ ID เพื่อเป็น primary key, Course สำหรับเก็บชื่อคอร์ส, Teacher สำหรับเก็บชื่ออาจารย์, Comment สำหรับเก็บข้อคิดเห็น และ Rating สำหรับเก็บระดับความพึงพอใจ (Tip: พิมพ์คำว่า prop แล้วกดแป้น Tab ติดกันสองที ดูผลครับว่าเกิดอะไรขึ้น)
 MVC4_08_07
สลับมาที่ ReviewsController เลื่อนลงข้างล่างสุด แล้วเพิ่มข้อมูล In-Memory ในรูปแบบ static private List ของคลาสโมเดล CourseReview เข้าไป เพื่อใช้งานทดแทนการเข้าถึงดาต้าเบสของจริงพลางๆ ก่อน (ผมจะสอนวิธีใช้ LINQ + Entity Framework อย่างละเอียดภายหลัง) ดังรูป:
MVC4_08_08
MVC4_08_09
จากนั้นไปที่แอ็กชั่น Index ของ ReviewsController.cs แล้วแก้โค้ดตามรูปข้างล่าง เพื่อบอกว่าโมเดลที่ผูกกับแอ็กชั่นนี้ให้เอาจาก LINQ query ที่มีการ select ทุกรีวิว แสดงผลเรียงตามลำดับชื่อ Teacher
 MVC4_08_10
เราก็จะได้โมเดลสำหรับวิวที่ยังไม่ได้ถูกสร้างขึ้น ให้ท่านทดลองรันโปรเจ็กต์ตอนนี้ ป้อน URL http://localhost:{เลขพอร์ต}/reviews จะได้ผลดังรูป:
MVC4_08_11
เหตุที่ฟ้อง error เนื่องจากเราบอก MVC runtime ว่าต้องการเร็นเดอร์วิวจากแอ็กชั่น Index ของReviewsController รันไทม์ก็จะค้นหาวิวสำหรับใช้เป็นเท็มเพลตโดยใช้วิธี “ตามธรรมเนียม”  กล่าวคือ พยายามหาไฟล์วิวชื่อ Index (ชื่อตรงกับแอ็กชั่น) จากโฟลเดอร์ Views\Reviews (ชื่อสอดคล้องกับคอนโทรลเลอร์) ซึ่งไฟล์ Index นี้มีได้หลายนามสกุล เพราะ MVC engine มีวิวเอ็นจินให้เลือกใช้สองตัวโดยดีฟอลต์ ได้แก่:
  • WebForm view engine : ไฟล์วิวใช้นามสกุล .aspx หรือ .ascx (เก่าแล้ว ไม่นิยมใช้)
  • Razor view engine : ไฟล์วิวใช้นามสกุล .cshtml (กรณี C#) หรือ vbhtml (กรณี Visual Basic)
นอกจากนี้ รันไทม์ยังพยายามค้นหาวิวจากโฟลเดอร์ Views\Shared เนื่องจากเป็นโฟลเดอร์สำหรับเก็บวิวที่เอาไว้ให้คอนโทรลเลอร์ทุกตัวแบ่งกันใช้ แต่ก็หาไม่เจอ
เพราะฉะนั้น ท่านต้องสร้างวิวขึ้นมาโดยคลิกขวาที่แอ็กชั่น Index > Add View และระบุพารามิเตอร์ต่างๆ ตามรูปข้างล่าง สังเกตว่าเลือก Create a strongly-typed view เพราะเรารู้จักชนิดของออปเจ็กต์โมเดลที่จะป้อนให้วิวดีอยู่แล้ว, เลือก Scaffold template เป็น List เพราะต้องการให้วิวแสดงข้อมูลรีวิวเป็นลิสต์ เสร็จแล้วคลิก Add

MVC4_08_12
โปรแกรม Visual Studio จะสร้างโฟลเดอร์ชื่อ Reviews ภายใต้โฟลเดอร์ Views พร้อมกับสร้างไฟล์วิว Index.cshtml ดังรูป:
MVC4_08_13
MVC4_08_14
จากนั้นเซฟโปรเจ็กต์และรัน ป้อน http://localhost:{เลขพอร์ต}/reviews ในเว็บบราวเซอร์ จะได้หน้าจอรีวิวอันสวยสดงดงามMVC4_08_15


 อ้างอิงจาก : http://www.devsqr.com/mvc4_part08/

ไม่มีความคิดเห็น:

แสดงความคิดเห็น