Group Blog
 
All Blogs
 

ASP.NET MVC Music Store Series 4



Views and Models

จาก series 3 เราได้เขียนฟังชั่นที่ return ข้อความกลับโดย controller action ซึ่งทำให้เราเห็นคร่าวๆ แล้วว่า controller มีการทำงานยังไงบ้าง แต่ใน real world application แค่นี้มันง่ายไปครับใช้ประโยชน์อะไรไม่ได้ เราจะได้เรียนรู้เพิ่มเติมใน series นี้ นั่นคือ View ที่ใช้แสดงหน้าเว็บ

การสร้าง View template

ในการใช้ view template เริ่มจากเราจะแก้ไขเมธอด HomeController Index ให้ return ActionResult และ View() ตามตัวอย่างที่ 1

ตัวอย่างที่ 1
    public class HomeController : Controller
    {
//
// GET: /Home/

public ActionResult Index()
        {
return View();
        }

    }

คำอธิบายตัวอย่างที่ 1
  • เราแก้ไขจาก return ค่า string แทนด้วยการส่ง View กลับ
ต่อไปเราจะสร้าง View template ทำได้โดยเอาเมาส์ชี้ไปที่เมธอด Index และคลิกเมาส์ขวาและเลือกเมนู "Add View" ตามรูปที่ 1 จะปรากฏหน้าต่าง Add View dialog ขึ้นมาครับตามรูปที่ 2

รูปที่ 1


จากรูปที่ 2 คือหน้าต่าง "Add View" จะช่วยให้เราสามารถสร้างไฟล์ View template ได้ง่ายขึ้นซึ่งชื่อ View name จะถูกตั้งมาเป็น default ตามเมธอดที่เราเลือกเราไม่จำเป็นต้องแก้ไขอะไรสามารถกดปุ่ม Add ได้เลย 

รูปที่ 2


เมื่อกดปุ่ม Add ผลที่ได้คือ Visual Web Developer จะสร้างไฟล์ใหม่ชื่อว่า "Index.cshtml" นี่คือ view template ครับซึ่งไฟล์ที่ได้จะวางตาม path ตือ ViewsHome (ให้เราสร้างโฟลเดอร์ดังกล่าวมาถ้าไม่มี) ผลที่ได้ตามรูปที่ 3

รูปที่ 3


สิ่งสำคัญคือทั้งชื่อและโฟลเดอร์ของไฟล์ "Index.cshtml" คือ default ASP.NET MVC naming conventions เป็นข้อกำหนดเพื่อช่วยลดการเขียน code ลง 
สังเกตได้ว่าโครงสร้างโฟลเดอร์ ViewsHome จะ match เข้ากับ Controller นั่นคือ HomeController และ view template จะ match เข้ากับชื่อเมธอด index ซึ่งเราระบุให้ return เป็น View

จากรูปที่ 3 Visual Web Develper จะเขียน code ง่ายๆมาให้เราด้วยเราเรียกการเขียนแบบนี้ว่า "Razor syntax" 

สามบรรทัดแรกเป็นการเซ็ตค่า Title โดยใช้ ViewBag.Title ให้ทดลองแก้ไขตามตัวอย่างที่ 2


ตัวอย่างที่ 2


จากนั้นทดลอง run จะได้ผลลัพธ์ตามรูปที่ 4


รูปที่ 4



การใช้ Layout สำหรับสร้าง Common site elements 

บนส่วนใหญ่จะมีการสร้าง content ที่ใช้สำหรับแชร์ร่วมกันหลายๆเพจ เช่น เมนู (navigation), footers, logo, stylesheet เราสามารถใช้ Rezor view engine ช่วยทำสิ่งเหล่านี้ให้ง่ายขึ้นได้โดยการสร้างเพจที่ชื่อว่า "_Layout.cshtml" ซึ่งจะมีการขึ้นมาตั้งแต่เราสร้างโปรเจคแล้วครับตามรูปที่ 5 (ดูที่ /Views/Shared)


รูปที่ 5


ให้เปิดไฟล์ตามรูปที่ 5 จะเห็นข้อมูลที่ถูกสร้างขึ้นมาตามตัวอย่างที่ 3

ตัวอย่างที่ 3


จากตัวอย่างที่ 3 ข้อมูลที่ส่งกลับมาจากแต่ละ view template จะถูกแสดงด้วยคำสั่ง @RenderBody() และข้อมูลที่ต้องการให้แสดงร่วมกันทุกๆหน้าให้มาตกแต่งที่หน้า _Layout.cshtml นี้

เราจะ design ให้ web MVC Music Store ของเรามี Header ร่วมกัน ให้แก้ไขที่ "_Layout.cshtml" ตามตัวอย่างที่ 4

ตัวอย่างที่ 4


ทอลองรันจะได้ตามรูปที่ 6

รูปที่ 6



การแก้ไข StyleSheet

เริ่มต้นโปรเจคจะประกอบไปด้วยไฟล์ CSS ที่ใช้สำหรับแสดงข้อความต่างๆ ดังนั้นเราจึงต้องมีการเพิ่มเติม CSS และไฟล์รูปภาพเพื่อให้เว็ลไซต์ของเรามีรูปร่างหน้าตาตามต้องการ

ให้เราไป download ไฟล์ชื่อ MvcMusicStore-Assets.zip โดยไปที่ //mvcmusicstore.codeplex.com/ หลังจาก download ให้แตกไฟล์ออกแล้ว copy โฟลเดอร์ Content มาทับโฟลเดอร์เดียวกันที่โปรเจคดังรูปที่ 7

รูปที่ 7


เมื่อเลือก Paste จะปรากฏตามรูปที่ 8 ให้เลือก checkbox "Apply to all items" และกดปุ่ม Yes

รูปที่ 8


จะได้ผลลัพธ์ตามรูปที่ 9

รูปที่ 9


ให้ทดลองรันอีกครั้งจะได้ตามรูปที่ 10 

รูปที่ 10







ติดตามต่อ
ASP.NET MVC Music Store Series 5



อ้างอิง


ผู้เขียน: procodeblog




 

Create Date : 25 พฤศจิกายน 2557    
Last Update : 25 พฤศจิกายน 2557 21:34:54 น.
Counter : 626 Pageviews.  

ASP.NET MVC Music Store Series 3


สร้าง StoreController

จาก series 2 เราได้สร้างหน้า home กันแล้ว ต่อไปเราจะสร้าง controller สำหรับการทำงานกับ music store กันซึ่งมี 3 ฟังชั่นดังนี้

  • หน้าแสดงรายการเพลงแบ่งตามประเภทที่มีอยู่ใน music store ของเรา
  • หน้าแสดงรายการเพลงที่ระบุประเภทของเพลง
  • หน้าแสดงรายละเอียดข้อมูลของแต่ละอัลบั้ม
เริ่มจากสร้าง StoreController ขึ้นมาทำแบบเดียวกันกับหน้า HomeController ใน series 2 โดยคลิกเมาส์ขวาที่โฟลเดอร์ "Controllers" และเลือกเมนู Add->Controller ตามรูปที่ 1

รูปที่ 1


จะปรากฏตามรูปที่ 2 ให้ตั้งชื่อ "StoreController" แล้วกดปุ่ม Add

รูปที่ 2


จากรูปที่ 3 เราจะได้เมธอด "Index" เป็น default เลยเราจะใช้เมธอดนี้เพื่อ implement ฟังชั่นที่ 1 คือหน้าแสดงรายการเพลงแบ่งตามประเภทที่มีอยู่ใน music store ของเราและเราจะทำการเพิ่มอีก 2 เมธอดเพื่อ implement ฟังชั่นที่เหลือคือหน้า Browse (หน้าแสดงรายการเพลงที่ระบุประเภทของเพลง) และ หน้าแสดง Details (หน้าแสดงรายละเอียดข้อมูลของแต่ละอัลบั้ม) 

เราจะได้ 3 เมธอดคือ Index, Browse และ Details ซึ่งจะเรียกว่า "Controller Actions" เช่นเดียวกับ  series 2 คือ HomeController.Index() ก็คือ "Controller Actions" ซึ่งทำหน้าที่ตอบกลับไปยัง URL request

ให้เราแก้ StoreController เมธอด Index, Browse และ Details เพื่อตอบกลับเป็นข้อความง่ายๆ ตามตัวอย่างที่ 1

รูปที่ 3


ตัวอย่างที่ 1
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MvcMusicStore.Controllers
{
public class StoreController : Controller
    {
//
// GET: /Store/

public string Index()
        {
return "Hello from Store.Index()" ;
        }

//
// GET: /Store/Browse

public string Browse()
        {
return "Hello from Store.Browse()" ;
        }

//
// GET: /Store/Details

public string Details()
        {
return "Hello from Store.Details()" ;
        }

    }
}
ทดลอง run โปรเจคและทดสอบไปยัง URLs ต่างๆ:

  • /Store
  • /Store/Browse
  • /Store/Details
ซึ่งการเรียก URLs เหล่านี้เป็นการเรียกใช้ action methods ที่อยู่ใน controller ของเรานั่นเองครับและผลที่ได้จะตอบกลับมาเป็นข้อความตามที่เราได้เขียนไว้ดังรูปที่ 4

รูปที่ 4


ต่อไปเราจะทำให้มัน dynamic ขึ้น ให้แก้ไขที่เมธอด Browse เพื่อรับ querystring ที่ส่งมาพร้อม URL โดยการเพิ่มพารามิเตอร์ "genre" ที่ action method ซึ่งการทำแบบนี้ ASP.NET MVC จะรับค่า querystring มาอัตโนมัติ แก้ไขไฟล์ StoreController ตามตัวอย่างที่ 2 (ก่อนแก้ให้ stop การรันก่อน)

ตัวอย่างที่ 2
        //
// GET: /Store/Browse?genre=Disco

public string Browse(string genre)
        {
string message = HttpUtility .HtmlEncode(
new System.Text.StringBuilder ("Store.Browse, Genre = ")
                .Append(genre).ToString());
return message;
        }

แนะนำ: จะเห็นว่าในตัวอย่างที่ 2 แทนที่จะรับค่ามาแล้วใช้ + เพื่อต่อข้อความ string แต่จะใช้ StringBuilder แทนอันนี้ควรจะใช้ให้ติดเป็นนิสัยเพราะการต่อข้อความตัวแปร string ด้วยเครื่องหมาย + นั่นถ้าเป็นระบบใหญ่ๆ จะมีผลถ้าหากการต่อข้อความนั้นทำอยู่หลายที่ซึ่งถ้าให้ดีควรใช้ StringBuilder ไปเลยจะได้ไม่ต้องมาตามแก้กันทีหลัง

และการใช้ HttpUtility.HtmlEncode เป็นเมธอด utility  ซึ่งช่วยป้องกันจากการส่ง script บางอย่างเพื่อโจมตีระบบ เป็นการป้องกันการ injection Javascript เช่น

/Store/Browse?Genre=

เมื่อแก้ไขเสร็จแล้วให้ทดลอง run เลยครับตามรูปที่ 5

รูปที่ 5


ต่อไปเราจะแก้ไขเมธอด Details ส่วนของ Details จะรับ ID เป็นพารามิเตอร์ เช่น /Store/Details/5
สังเกตเห็นว่าจะต่างกับแบบแรกที่ซึ่ง ASP.NET จะสามารถรับค่าได้เลยแบบอัตโนมัติ ให้แก้ไขตามตัวอย่างที่ 3

ตัวอย่างที่ 3
        //
// GET: /Store/Details/5

public string Details(int id)
        {
string message = new System.Text.StringBuilder(
"Store.Details, ID = ").Append(id).ToString();
return message;
        }


ทดลอง run ตามรูปที่ 6

รูปที่ 6


ทบทวนสิ่งที่ได้ทำไป

  • เราได้สร้าง ASP.NET MVC ด้วย Visual Web Developer
  • ได้เรียนรู้โครงสร้างโฟลเดอร์ของ ASP.NET MVC เบื้องต้น
  • ได้ทดสอบรัน website ด้วย ASP.NET Developer Server
  • ได้สร้างคลาส Controller 2 คลาส: HomeController และ StoreController
  • ได้สร้าง Action Method (ได้แก่ Index, Browse, Details) ที่อยู่ใน Controller และ return ข้อความกลับไปยัง browser




ติดตามต่อ
ASP.NET MVC Music Store Series 4



อ้างอิง


ผู้เขียน: procodeblog




 

Create Date : 24 พฤศจิกายน 2557    
Last Update : 24 พฤศจิกายน 2557 21:41:12 น.
Counter : 510 Pageviews.  

ASP.NET MVC Music Store Series 2


การลงโปรแกรม

บทความนี้เราจะสร้างโปรเจค ASP.NET MVC 3 โดยใช้ของฟรีกันครับนั่นคือ Visual Web Developer 2010 Express (ตอนนี้ไป 2015 แล้วที่แจกฟรี แต่เชื่อว่าหลายๆที่ยังคงใช้ version เก่าอยู่แต่ก็ถือว่ายังใช้ได้ครับ ของใหม่เดี๋ยวจะมีออกบทความมาเรื่อยๆ ละกันครับ) เราจะค่อยๆ เพิ่ม features เรื่อยๆ จน application ของเราสมบูรณ์
เราสามารถใช้ได้ทั้ง Visual Studio 2010 SP1 หรือ Visual Web Developer 2010 Express SP1 นะครับแล้วแต่สะดวก และจะใช้ SQL Server Compact (ของฟรี) ในการเก็บข้อมูล หรือ Database นั่นเอง


เริ่มสร้างโปรเจค ASP.NET MVC 3 กันเลย

ให้เปิด Microsoft Visual Web Developer 2010 Express กันเลยครับ ตามรูปที่ 1

รูปที่ 1

ให้เลือกตามรูปที่ 2 Visual C# > Web > ASP.NET MVC 3 Web Application (ถ้าเป็น VB.NET ก็เลือกที่ Visual Basic) ให้พิมพ์ที่ Name ตั้งชื่อโปรเจคว่า MvcMusicStore ส่วน Location คือ path ที่เราจะใช้บันทึกโปรเจคเลือกตามใจชอบ จากนั้นกดปุ่ม OK

รูปที่ 2

ให้เลือกตามรูปที่ 3 และกดปุ่ม OK

รูปที่ 3

จะได้โครงสร้างโปรเจคตามรูปที่ 4

รูปที่ 4

จากรูปที่ 4 โครงสร้างโปรเจคหลักๆที่สำคัญมีดังนี้

Folder
Purpose
/Controllers Controllers มีหน้าที่ตอบสนอง input ที่ส่งมาจาก browser ซึ่งจะทำหน้าที่ตัดสินใจว่าจะทำอะไรกับ input ที่ได้และส่งผลลัพธ์กลับไปยังผู้ใช้
/Views Views มีหน้าที่สำหรับ UI templates
/Models  Models เป็นตัวเก็บข้อมูล
/Content
เป็น folder สำหรับ images, CSS,  static content
/Scripts เป็น folder สำหรับ JavaScript files

เกี่ยวกับ Controllers

  เมื่อก่อน web frameworks จะมีการทำงานคือเราจะเรียก URL ประมาณว่า "/Products.aspx" หรือ "/Products.php" เป็นการเรียก URL ที่เข้า map กับไฟล์บน disk
  แต่ Web-based MVC frameworks จะ map ไปยัง server code ต่างออกไป แทนที่จะ map URL กับไฟล์ เปลี่ยนเป็น map URL กับ method ของคลาสแทน ซึ่งคลาสเหล่านี้ก็คือ "Controllers" และคอยทำหน้าที่ตอบสนองหรือประมวลผลของ HTTP request และ รับ user input ทำหน้าที่รับข้อมูลและบันทึกข้อมูล และยังทำหน้าที่ส่งผลลัพธืกลับไปยัง user เช่น แสดงผลเป็น HTML หรือส่งไฟล์กลับให้ donwload หรือ redirect ไปยัง URL อื่นๆ เป็นต้น

เริ่มสร้าง HomeController

เราจะเริ่มสร้าง MVC Music Store application กันโดยเริ่มจากการสร้าง Controller คลาสที่คอยตอบสนอง URL ของหน้า Homepage ซึ่งเราจะใช้ defalut naming conventions (เป็นข้อกำหนดของ framework ที่จะต้องตั้งชื่อคลาสตามข้อกำหนดเพื่อลดการเขียน code ลง) เราจะตั้งชื่อว่า HomeController
ให้เราคลิกเมาส์ขวาที่โฟลเดอร์ "Controllers" และเลือก "Add" และ "Controller..." ตามรูปที่ 5

รูปที่ 5

จะปรากฏหน้าต่าง "Add Controller" ดังรูปที่ 6 ให้เราตั้งชื่อ Controller name ว่า "HomeController" แล้วกดปุ่ม Add

รูปที่ 6

จะได้ไฟล์ HomeController.cs และ code ตามรูปที่ 7

รูปที่ 7

เพื่อจะทดสอบเราจะแก้ไเมธอด Index ง่ายๆด้วยการให้ return ค่า string โดยทำการแก้ไขดังนี้
นำ code ตัวอย่างที่ 1 ไปทับ ตั้งแต่บรรทัดที่ 14-17 ตามรูปที่ 7

ตัวอย่างที่ 1
        public string Index()
        {
return "Hello from Home" ;
        }


ทดสอบ Application

ที่นี้เราสามารถทดสอบรัน web site ได้แล้วครับ โดยการกดปุ่ม Start Debugging ตามรูปที่ 8 หรือกดปุ่ม F5

รูปที่ 8

เมื่อกดปุ่มรัน หรือ F5 โปเจคเราจะถูก compile และ build และจะทำการ start ASP.NET Development Server ซึ่งทำหน้าที่เหมือนกับ IIS Web Server ของ windows (ข้อดีของการใช้ IDE Tool คือลดการ setup ไปได้เยอะ) เมื่อเริ่ม start จะปรากฏข้อความตามรูปที่ 9 เราสามารถเข้า URL ตามนั้นได้เลย (URL ที่ได้อาจไม่เหมือนกัน)

รูปที่ 9

ผลการรันตามรูปที่ 10

รูปที่ 10
ติดตามต่อ

อ้างอิง

ผู้เขียน: procodeblog




 

Create Date : 19 พฤศจิกายน 2557    
Last Update : 24 พฤศจิกายน 2557 21:43:09 น.
Counter : 697 Pageviews.  

ASP.NET MVC Music Store Series 1

คร่าวๆ

Series MVC Music Store เป็นบทความการสร้าง web application แบบ step-by-step ด้วย ASP.NET MVC และ Visual Web Developer บทความนี้ยังเหมาะสำหรับผู้สนใจที่จะเริ่มเขียน web ด้วยเช่นกัน ซึ่งเราจะสร้างเว็บ music store ง่ายๆกัน โดยมีส่วนประกอบกัน 3 ส่วนคือ shopping (การแสดงสินค้า), checkout (การสั่งซื้อ), administration (การบริหารเว็บ)

เรามาดูตัวอย่างคร่าวๆ กันว่าจะได้ web application หน้าตาแบบไหน

รูปที่ 1 หน้า Home


รูปที่ 2 สามารถเลือกแสดงตามประเภทของสินค้าหรือเพลง


รูปที่ 3 สามารถแสดงแต่ละอัลบั้มหรือสินค้า และเลือกซื้อได้โดยการกดปุ่ม Add to cart


รูปที่ 4 สามารถดูรายการที่จะซื้อสินค้า และยกเลิกรายการได้


รูปที่ 5 เมื่อต้องการซื้อสินค้า จะมีหน้า Log On หรือสมัครก่อนเพื่อยืนยันการซื้อสินค้า


รูปที่ 6 หน้าจอการสมัคร


รูปที่ 7 หลังจากสมัคร สามารถกรอกข้อมูลที่อยู่เพื่อส่งสินค้า


รูปที่ 8 เมื่อสั่งซื้อสินค้า จะแสดงหน้าจอยืนยันการซื้อสินค้า


รูปที่ 9 หน้าจอการบริหารงานระบบสามารถเพิ่มสินค้า แก้ไขข้อมูล หรือลบรายการสินค้าออกได้


ติดตามต่อได้ใน Series ต่อไปเร็วๆนี้








ผู้เขียน: procodeblog




 

Create Date : 16 พฤศจิกายน 2557    
Last Update : 19 พฤศจิกายน 2557 16:23:51 น.
Counter : 515 Pageviews.  


เด็กขงเบ้ง
Location :
กรุงเทพฯ Thailand

[Profile ทั้งหมด]

ให้ทิปเจ้าของ Blog [?]
ฝากข้อความหลังไมค์
Rss Feed
Smember
ผู้ติดตามบล็อก : 1 คน [?]




Friends' blogs
[Add เด็กขงเบ้ง's blog to your web]
Links
 

 Pantip.com | PantipMarket.com | Pantown.com | © 2004 BlogGang.com allrights reserved.