Get Start ASP.NET MVC2 #2 : CRUD App
ตัวอย่างการพัฒนา CRUD Application โดยใช้ ASP.NET MVC 2.0
CRUD Application คืออะไรสำหรับท่านที่ยังไม่รู้ก็ตามนี้ครับ CRUD คือ application ที่มี Functional C = Create, R = Read, U = Update, D = Delete มันก็คือ Application ธรรมดาที่มี Function พื้นฐานเหล่านี้ครบถ้วนนั่นเอง
เมื่อ Article ตอนที่แล้วผมได้แสดงให้ดูหลักการณ์และพื้นฐานการทำงานของ ASP.NET MVC 2.0 ไปแล้วท่านที่ได้อ่านแล้วหรือมีพื้นฐานอยู่แล้วก็คงจะเข้าใจหลักการทำงานพื้นฐานของ ASP.NET MVC หากท่านใดไม่ได้อ่านหรือยังไม่เข้าใจหลักการณ์พื้นฐานของ ASP.NET MVC รบกวนกลับไปอ่านใน Article ตอนที่ #1 ก่อนนะครับเนื่องจากใน Article นี้จะเน้นตัวอย่าง CRUD อย่างเดียว
มาเตรียมApplicationตัวอย่างกันดีกว่า
1. สร้าง Database ขึ้นมาใน SQL Server 2005 หรือ 2008 ก็ได้ชื่อไรก็ได้ตามสบาย
2. ใน Database นั้นให้มี Table เดียวชื่อ Region โดยมี Field ตามรูปด้านล่าง(ไม่ต้องมากมายแค่ใช้เป็นตัวอย่าง)
(Note: ผมใช้ Database ของ Northwind ซึ่งมี Table Region อยู่แล้วเพราะขี้เกียจสร้างใหม่ใครขี้เกียจสร้างก้อไปหาโหลดมาใช้)
3. New ASP.NET MVC2 Project
4.เตรียม Models เพิ่ม project item Linq to SQL ที่ Folder Models เข้ามาตั้งชื่อตาม Database เพื่อให้ไม่งงตอนใช้งาน (จริงๆชื่ออะไรก็ได้ ชื่อ หมา, แมว, ห่าน ก็ได้ถ้าตอนใช้งานแล้วไม่งง) แล้วก็ลาก Table จาก Server Explorer ไปที่ DesignView ของ Linq to SQL ดังรูปด้านล่าง
เสร็จแล้วจะได้ดังรูปด้านล่าง
5.เตรียม Controller โดยการเพิ่ม Controller class โดย Click ขวาที่ Folder Controllers ที่ Solution explorer > Add > Controller แล้ว Add Controller Class เข้า
จะได้ดังรูปด้านล่างโดยภายใน Class จะมี Template ของ Action Create,Update,Delete,Detail ให้เรียบร้อย เราสามารถเปลี่ยน Naming ของ Action ได้เลยตามเหมาะสม
6.เตรียม Views โดยการ New folder ให้อยู่ภายใต้ Views folder โดยให้ตังชื่อตาม Controller เน้นนะครับว่าชื่อต้องตรงกัน อย่างผมตั้งชื่อ Controller Class ว่า NorthwindController ผมต้องสร้าง Folder ชื่อ Northwind ดังรูป
แล้วก็ทำการเพิ่ม Views เข้าไปที่ Folder ดังกล่าวดังนี้ตามรูปดังนี้
โดยเพิ่มเข้าไปทั้งหมดคือ Create,List,Detail,Edit,Delete ซึ่งจะได้ทั้งหมดตามรูปด้านล่าง
เมื่อเตรียมการทั้งหมดเรียบร้อยแล้วคราวนี้เราก็สามารถเริ่ม Coding ตาม Feature ของ Application ได้เลย
CRUD – Read
มาเริ่มจาก Read กันก่อนก็คือการดึงข้อมูลขึ้นมาแสดงนั่นเอง อันดับแรกต้องไป Coding ที่ Controller class ดังนี้ปกติ
public ActionResult Region()
{
var db = new TestMVC2.Models.NorthwindDataContext();
return View(db.Regions);
}
ปกติถ้า Add controller class เข้ามา Action ที่ใช้ Display ข้อมูลหรือในตัวเย่างของเราเรียกว่า Read function นั้นคือ Index() แต่ผมเปลี่ยนชื่อเป็น Region เพื่อให้ดูเหมาะสม จาก Code จะมีการ Render View จาก Table Region โดยใช้ LinqToSQL ตามที่เราได้เตรียมไว้ข้างต้น โดยที่เราแทบไม่ต้องยุ่งกับ View ที่เราเตรียมไว้ก่อนเลยเพราะมันทำการ Generate HTML Template เพื่อใช้แสดงผลดังนี้
<h2>Region</h2>
<table>
<tr>
<th></th>
<th>
RegionID
</th>
<th>
RegionDescription
</th>
</tr>
<% foreach (var item in Model) { %>
<tr>
<td>
<%= Html.ActionLink("Edit", "RegionEdit", new { id=item.RegionID }) %> |
<%= Html.ActionLink("Details", "RegionDetail", new { id = item.RegionID })%> |
<%= Html.ActionLink("Delete", "RegionDelete", new { id = item.RegionID })%>
</td>
<td>
<%= Html.Encode(item.RegionID) %>
</td>
<td>
<%= Html.Encode(item.RegionDescription) %>
</td>
</tr>
<% } %>
</table>
<p>
<%= Html.ActionLink("Add Region", "RegionAdd") %>
</p>
มีทั้งทั้ง Table ทั้ง Linkedต่างๆเรียบร้อย เราสามารถแก้ Caption หรือ ปรับ Control เองได้
*** ตัวแปร “Model” เป็น Object ของ Data model IEnumerable ถูกส่งมาที่View โดยกำหนดที่ page directive เพื่อใช้ Binding กับ Control และแสดงผลซึ่งเหมือนกันทุกๆ view ที่มีข้อมูลมากกว่า 1 Rows เช่น การแสดง List ของข้อมูลที่ retrive มาจาก Database
เมื่อเราลองดู Run ดูผลลัพธ์ก็จะได้ผลลัพธ์ดังรูปด้านล่าง(ผมได้ใส่ข้อมูลตัวอย่างไว้ใน Database ก่อนแล้ว)
CRUD – Create
มาต่อด้วยการ Create หรือ Insertเข้าสู่ Database นั่นเอง หลักการก็เหมือนเดิมครับต้องดูที่ Controller ว่าจะ Coding เพื่อ Insert
เปลี่ยนชื่อ Action (Method) จากที่ Code gen ออกมาให้แล้วก็เพิ่ม Code ตามด้านล่างนี้
[HttpPost]
public ActionResult RegionAdd(Region region)
{
if (ModelState.IsValid) //Check model ว่าถูกต้องตรงกับ object ที่ pass เข้ามา�
{
try
{
var db = new NorthwindDataContext();
db.Regions.InsertOnSubmit(region);
db.SubmitChanges();
return RedirectToAction("Region");
}
catch
{
return View(region);
}
}
return View(region);
}
ทำการ Validate model และ Insert โดยใช้ LinQtoSQL เสร็จแล้วส่ง Result หลัง Insert เสร็จ Redirect ไป Render view หน้า List เพื่อแสดงผลหลังทำการ Insert
ไปที่ View ของ Form ที่ใช้เพิ่มข้อมูลก็จะถูก Gen มาให้ตั้งแต่ตอนเพิ่ม View ดังนี้
<h2>RegionAdd</h2>
<% using (Html.BeginForm()) {%>
<%= Html.ValidationSummary(true) %>
<fieldset>
<legend>Fields</legend>
<div class="editor-label">
<%= Html.LabelFor(model => model.RegionID) %>
</div>
<div class="editor-field">
<%= Html.TextBoxFor(model => model.RegionID) %>
<%= Html.ValidationMessageFor(model => model.RegionID) %>
</div>
<div class="editor-label">
<%= Html.LabelFor(model => model.RegionDescription) %>
</div>
<div class="editor-field">
<%= Html.TextBoxFor(model => model.RegionDescription) %>
<%= Html.ValidationMessageFor(model => model.RegionDescription) %>
</div>
<p>
<input type="submit" value="RegionAdd" />
</p>
</fieldset>
<% } %>
<div>
<%= Html.ActionLink("Back to List", "Region") %>
</div>
จาก Code ด้านบนเราสามารถแก้ไข Label text หรือ แม่กระทั่ง Control ให้เหมาะสมกับการทำงานกับผู้ใช้ผ่อน View
*** ตัวแปร “model” เป็น Oject ของ Data model ถูกส่งมาที่View โดยกำหนดที่ page directive เพื่อใช้ Binding กับ Control และแสดงผลซึ่งเหมือนกันทุกๆ viewที่ทำงานกับ ข้อมูลเฉพาะ เจาะจงกับ 1 row เช่น Insert, Update, และ แสดง Detail
เมื่อสำเร็จลองทดสอบ Run เพื่อตรวจสอบผลลัพธ์ได้ผลดังนี้
ลองกดปุ่ม RegionAdd โดยการไม่ใส่ข้อมูล จะขึ้นข้อความเตือนเพราะเราได้ Validate ข้อมูลก่อน Insert ไว้แล้ว
ทำการ Insert ข้อมูลที่ต้องการแล้ว Submit ไปจะแสดงหน้าจอ List แสดงผลลัพธ์ของ Row ที่เพิ่มขึ้นมาใหม่
ข้อมูลที่เพิ่มเข้าไปใหม่แสดงในหน้าจอ List
CRUD – Update การแก้ไขข้อมูล ซึ่งจะมี 2 ส่วนคือ 1.ดึงdetailของรายการที่ต้องการ updte มาแสดง Detail เพื่อเลือกแก้ไข 2.Update ข้อมูลไปที่ Database และแสดงผลที่หน้า List
public ActionResult RegionEdit(int id)
{
var db = new NorthwindDataContext();
var region = db.Regions.SingleOrDefault(x=>x.RegionID==id);
return View(region);
}
Code ส่วนนี้เป็นการดึงข้อมูลที่ถูกเลือกที่จากหน้าจอ List มาเพื่อแสดง Detail ซึ่งหากเราต้องการแสดง detail เฉยๆก็ใช้ View ที่มี Control เพื่อแสดงอย่างเดียวแก้ไขไม่ได้แต่ในกรณีนี้เราต้องการแสดง Detail เพื่อแก้ไขเราจึงใช้ View ที่อนุญาติให้แก้ไขข้อมูลได้
[HttpPost]
public ActionResult RegionEdit(int id, FormCollection collection)
{
var db = new NorthwindDataContext();
var region = db.Regions.SingleOrDefault(x => x.RegionID == id);
if (ModelState.IsValid)
{
try
{
UpdateModel(region);
db.SubmitChanges();
return RedirectToAction("Region");
}
catch
{
return View(region);
}
}
return View(region);
}
Code ส่วนนี้เป็นการ Update ข้อมูลไปที่ Database แล้วแสดงผลการแก้ไขกลับที่หน้าจอ List
เมื่อไปดูที่ View ที่ใช้ในการ Update แก้ไขจะเป็นดังนี้
<h2>RegionEdit</h2>
<% using (Html.BeginForm()) {%>
<%= Html.ValidationSummary(true) %>
<fieldset>
<legend>Fields</legend>
<div class="editor-label">
<%= Html.LabelFor(model => model.RegionID) %>
</div>
<div class="editor-field">
<%= Html.TextBoxFor(model => model.RegionID) %>
<%= Html.ValidationMessageFor(model => model.RegionID) %>
</div>
<div class="editor-label">
<%= Html.LabelFor(model => model.RegionDescription) %>
</div>
<div class="editor-field">
<%= Html.TextBoxFor(model => model.RegionDescription) %>
<%= Html.ValidationMessageFor(model => model.RegionDescription) %>
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
<% } %>
<div>
<%= Html.ActionLink("Back to List", "Region") %>
</div>
View ก็เหมือนเดิมครับแทบไม่ต้องแก้อะไรอาจแค่แก้ Wording ต่างๆหรือปรับ Control ตามสะดวก
มาลองทดสอบ Run ทดสอบการ Edit กันดู
เลือกรายการที่ต้องการแก้ไข
แก้ไขข้อมูลที่ต้องการ
เมื่อ Save แล้วจะ Redirect ได้ผลลัพธ์ ดังนี้
CRUD – การ Delete ข้อมูล
ที่ Controller อย่างเดียวแล้วกัน
public ActionResult RegionDelete(int id)
{
var db = new NorthwindDataContext();
var region = db.Regions.SingleOrDefault(x => x.RegionID == id);
return View(region);
}
ดึงข้อมูลที่ต้องการ ลบ มาแสดง Detail เราจะไม่ลบ Row จากหน้า List ให้แสดง Detail ก่อน
[HttpPost]
public ActionResult RegionDelete(int id, FormCollection collection)
{
var db = new NorthwindDataContext();
var regiondel = db.Regions.SingleOrDefault(x => x.RegionID == id);
db.Regions.DeleteOnSubmit(regiondel);
var region = db.Regions;
if (ModelState.IsValid)
{
try
{
db.SubmitChanges();
return RedirectToAction("Region");
}
catch
{
return View(region);
}
}
return View(region);
}
ทำการ ลบรายการออกจาก Database เลยใช้ LinQtoSQL แล้ว แสดงผลหน้า List.
เนื่องจากได้อธิบายส่วนต่างๆของการ Read,Create,Update แล้ว Delete ขอพิมพ์คร่าวๆแล้วกันเนื่องจากขี้เกียจพิมพ์ซ้ำซากคิดว่า 3 action ที่ผ่านมาน่าจะทำให้พอจิตนาการ View ได้ว่าเขียนทำยังไงนะครับ ถ้าคิดไม่ออกยังไงหากท่านทำตามโดย Visual studio ท่านก็สามารถดูจาก View ที่ Gen มาดได้หากติดจิงๆก็สามารถดูจาก Code ที่ผมแนบไปได้ครับ
กอ่นเอาไปลอง Test ต้องสร้าง Base แล้วเปลี่ยน Connection string ด้วยนะ
มาถึงตอนนี้ผมคิดว่าถ้าได้อ่านบทความาตั้งแต่ตอนแรกน่าจะสร้า App จาก ASP.NET MVC2 กันได้เป็นแน่แท้ แต่จิงๆมันมีอีกหลายเรื่องเกี่ยวกับ ASP.NET MVC ทั้งเรื่อง View Template เรื่อง Security ต่างๆ ผมอาจจะเลือกมาเขียนหรือไม่ก็ได้ในอนาคต แต่สำหรับ 2 ตอนนี้น่าจะพอสำหรับพื้นฐานเพื่อนำไปต่อยอด ซึ่งผมเองขอเปลี่ยนไปเขียนเรื่องอื่นๆบ้างถ้าเขียนแต่ MVC อย่างเดียวก็เซ็งตาย
ขอบคุณ
Prasert Jaipet
Posted on June 15th, 2010 | By: Prasert | Tags: ASP.NET MVC, ASP.NET MVC2, CRUD App
Filed under Pattern and Design, Web Dev.
Get Start ASP.NET MVC2 #1
เริ่มต้นใช้งาน ASP.NET MVC2 กันครับ
สวัสดีครับ ทุกท่านผมไม่ได้เขียน Article มานานมากๆแล้วเนื่องจากไม่ว่างพอว่างก็ไม่มีอารมณ์จะเขียนแต่ตอนนี้อยู่ระหว่างเปลี่ยนงาน(ตกงาน) เลยมีเวลาว่างพอที่จะเขียนได้ครับ พูดมามากแล้วเริ่มกันเลยดีกว่า
ทำไมผมถึงเลือกเขียนเรื่องASP.NEMVC มาเขียนจิงๆแล้วที่ผมเลือกมาเขียนเพราะมันเป็เรื่องค่อนข้างสำคัญสำหรับ .NET Developer ทุกท่านเนื่องจากหากท่าน ลองใช้ ASP.NET Web Form กับ ASP.NET MVC นั้นแตกต่างกันอย่างมากทั้งเรื่อง Programing Model ที่ Web Page เสมือนเป็น Event-Driven และ ASP.NET MVC นั้นใช้หลักการ HttpRequest โดยอาศัย Technology ของ RESTFul และเรื่องของ Page Life cycle ที่ไม่มีแล้ว Page ทำหน้าที่เป็นแค่ View เท่านั้น เป็นต้น
MVC( Model View Control ) นั้นเป็น Presentation Pattern ที่ใช้ในการ Develop SW มาตั้งแต่ยุก 80 แต่ Microsoft นั้นนำมา Implement เป็น Framework หนึ่งในการ Develop SW ใน Platform .NET จิงๆเราสามารถ Implement MVC ได้เองมานานแล้วแต่เมื่อมี ASP.NET MVC มาช่วยจะสามารถทำให้เราพัฒนา Web site ของเราได้เร็วขึ้นแลสามารถ Test ได้ง่ายขึ้นด้วย เนื่องจากธรรมชาติของพวก Presentation Pattern นั้นเวลาเค้ากำหนด pattern จะAlign TDD (Test Driven) เป็นหลักอยู่แล้ว อ่ออทำไมถึงรอ Version2 พูดๆตรงๆครับผมใช้งานพวก Extension framework ของ .NET มานานผมไม่ไว้ใจ Version แรกจริงๆไม่มีไรมากหรอกครับแค่ผมคิดมาว่าไม่ควรนำมาใช้ใงานจริง (ความเห็นส่วนตัว)
(พื้นฐานและหลักการของ MVC ผมไม่พูดถึงแล้วกันเนื่องจากมี Article เยอะมากๆแล้วถ้าอยากรู้สามารถหาใน Google ได้ไม่ยากมีทั้งภาษาไทยและ English)
พูดมากแล้วมาลองพัฒนา ASP.NET MVC Application ตัวอย่างโดยใช้ VS 2008 กันเลยดีกว่า โดยตัวอย่างที่เราจะทำกันนั้นจะเป็น App จิ๊ดๆ (ยิ่งกว่าเล็ก) แต่ครบ CRUD Function ทั้งหมด. OK, Let’s Go !!!!!
ก่อนอื่นท่านที่ยังไม่ท่านที่ยังไม่มี ASP.NET MVC2 ให้ไป Download ที่นี่ มา Install ก่อนหากท่านมี Release ก่อนหน่าของ ASP.NET MVC2 ไม่ว่าจะเป็น Beta,RC หรืออะไรก็ตามให้ท่านเอาออกให้หมดก่อนที่จะ Install
New ASP.NET MVC2 Project
สร้าง project ใหม่โดยเลือก ASP.NET MVC2 ดังรูป
จะเห็นว่าเราสามารถลง ASP.NET MVC ทั้ง Version1,2 ครับในที่นี้เลือก Version2
เมื่อเราเลือกที่จะสร้าง Web app ด้วย ASP.NET MVC มันจะเราเลือกว่าต้องการจะสร้าง Test project (unit test) หรือไม่ซึ่งเราสามารใช้ได้ทั้ง VS unit Test หรือ Test framework อื่นที่ทำงานกับ VS ได้ตามรูปด้านล่าง
เลือกว่าจะสร้าง Unit Test Project หรือไม่ หลังจาก OK เรียบร้อยจะได้ Project ASP.NET MVC ใหม่ดังรูป
จากรูปด้าน บนก็มี 3 Folder หลักตามชื่อของ MVC
- Models = ก็เก็บ Data model , Domain model หรือ โครงสร้างข้อมูล ตาม Datasource หรือ Repository
- Controllers = เก็บ Controller class ที่เป็น Control logic ของระบบในการการแสดงผล และ ทำงานกับ Model
- Views = Template ที่กำหนดรูปแบบในการแสดงผลข้อมูล หรือ Inter act กับผูู้ใช้งาน
(เมื่อเราสร้าง project ใหม่ VS จะมีตัวอย่างมาให้คือ Home กับ Account นั่นเอง)
ส่วน Artifact Folder อื่นก็มี Content folder เก็บ CSS files และ images , Scripts folder ก็เก็บพวก Java script file ต่างๆ folderที่เหลือก็เป็น Folder พื้นฐานของ VS ดังนั้นลอง Run(F5) ดูครับ
อ่อเกือบลืมท่านที่ลง 2 Version VS2008 มี Conflict ในการ reference version ของ Dll โดยมันจะ reference version1มาให้ ท่านต้อง Remove Dll version1 ออกแล้ว Reference ใหม่เป็น Version2 ถ้าเป็นไปได้ก็ Migrate ให้เหลือ Version ใหม่สุดเลยก็จะดีกว่าแต่ผมขี้กียจแล้วอยากจะลองดูด้วยก็เลยไม่เอาออก
�
เมื่อลอง Run(F5) จะได้ดังรูปด้านบน โดยจะ Default ที่ Home ซึ่งการกำหนดค่า default ที่ File Global.asax ตาม Code ด้านล่าง
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
}
}
เมื่อแก้ไข Default Controller และ Action ตาม Code ด้านล่างแล้วกด Run(F5) อีกครับ
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Account", action = "LogOn", id = UrlParameter.Optional } // Parameter defaults
);
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
}
}
![]()
เมื่อลองเปลี่ยน Default parameter เป็น Controller:Accout และ Action:Logon ที่file Global.asax จะได้ดังรูป
มาดู URL Routing Pattern จากตัวอย่าง Code Default คือ {controller}/{action}/{id} คราวนี้มาลองดูกันนะครับเมื่อเราเปลี่ยน Default Controller มาเป็น Account และ Action เป็น SignOn แล้วเราจะเรียกกับไป Home อย่างไร เมื่อเราพิจรณาจาก URL Routing Pattern แล้วเราสามารถเรียกไปที่ Home ได้ดังนี้ครับ home/index
�
จากรูป URL เราไม่ได้ใส่ id เนื่องจากใน code ที่ Global.asax ด้านบน เรากำหนดเป็น parameter option คือไม่ใส่ก็ได้
มาที่เรื่อง URL Routing Pattern ที่เราใช้ คือ {controller}/{action}/{id} แต่เราสามารถใช้ Custom และ maping ได้หลายๆแบบตามความเหมาะสมของแต่ละ Application ไปตัวเอย่างเช่น blog/{action}/{entry} การ maping ผมจะทำให้ดูในตัวอย่างต่อไปครับ
ถึงตรงนี้ก็คงมาได้ครึ่งทางแล้วครับ อ่านจบถึงตรงนี้ผมคิดว่าเพื่อนๆคงจะพอรู้ถึง basic และ การทำงานของ ASP.NET MVC ในเบื้องต้นบ้างไม่มากก็น้อย ตอนต่อไปจะกล่าวถึง sample CRUD Application ที่จะทำให้ดูเป็นตัวอย่างกันยาวๆเลย
ขอบคุณครับ
Prasert Jaipet
Posted on June 10th, 2010 | By: Prasert | Tags: ASP.NET MVC, ASP.NET MVC2
Filed under Pattern and Design, Web Dev.
Old article form Dotnetdiff
รวมบทความเก่าจาก dotnetdiff.com มี article ดังนี้
- Basic Webpart Article
- High Scal .Net App Part1,2 Article
- httphandler
- MSDNA_PoEaa_Design
- Semantic Web Part 1
- RESTFul form Vtalk9
- Velocity Framwork cache framework
- Upload automatically using Windows Service
หัวข้อเก่าๆก็ประมาณนี้ครับสมัย dotnetdiff.com ลองโหลดไปดูครับเผื่อมีประโยชน์
http://cid-03c43cb2daa9af8b.skydrive.live.com/self.aspx/Dotnet66/Old^_Article.rar
ขอบคุณครับ
Posted on April 28th, 2010 | By: Prasert | Tags: dotnetdiff, old article
Filed under Announcement, Coding tactics, Pattern and Design, Web Dev., Windows Dev.
Welcome
ยินดีต้อนรับ สู่ dotnet66 ครับ หากท่านได้ที่ได้พอติดตามหรือผ่านเข้าไปใน dotnetdiff ท่านคงพอจะรู้ว่าผมเป็นหนึ่งใน Founder ของ dotnetdiff ซึ่งตอนนี้ผมกำลังจะปิดมันลงเนื่องด้วยเวลาของ Author ไม่เป็นใจจึงเห็นพ้องว่าปิดทิ้งดีกว่าและผมเองได้มาเปิด dotnet66 ขึ้นมาซึ่งเป็นลักษณะ Web bloging ไม่ใช่ .NET Community นะครับ ในความหมายของผมคือผมอยากจะเขียนอะไรก็ได้ เขียนแนวสบายๆก็ได้ไม่ต้องทางการมากมายนัก แต่เนื้อหาก็คงหนีไม่พ้น MS.NET Technology เหมือนเดิม เนื่องจากเป็น Blog นะครับเนื้อหาก็เป็นลักษณะในการแสดงแนวคิดของผมในเรื่องต่างๆเกี่ยวกับ MS.NET และให้เพื่อนๆทุกท่านที่ผ่านเข้าช่วยกันแสดงความคิดเห็นของตนเอง
ย้ำนะครับไม่มีถูกผิดแค่เสนอความคิดของตนเท่านั้น ให้ผู้อ่านเห็นแนวคิดหลายๆแบบเพื่อเอาไปใช้ได้ถูกต้องตรงประเด็นที่สุด
ใคร Comment แนวดูถูกความคิดคนอื่น หรือ หยาบคายผมจะลบทิ้งทันที
และสุดท้ายนี้ผมหวังว่า Blog นี้จะเป็นประโยชน์กำผู้ที่หลงเข้ามาบ้างนะครับ
Prasert Jaipet(aekram43)
Posted on April 27th, 2010 | By: admin | Tags: Announcement
Filed under Announcement





