Showing posts with label ASP.Net နှင့် MVC. Show all posts
Showing posts with label ASP.Net နှင့် MVC. Show all posts

Feb 6, 2017

Cannot attach the file mdf as database mvc ဆိုတဲ့ Error ဖြေရှင်းခြင်း

sagaing
ASP.NET MVC မှာ Connection String ထဲမှာ ၁)မှာကဲ့သို့ သတ်မှတ်ထားပြီး၊ နောက်ပိုင်းမှာမှ ၂)မှာကဲ့သို့ AttachDBFilename Attribute ကို ထည့်လိုက်တဲ့အခါမှာ...

၁)<add connectionstring="Data Source=(LocalDb)\v11.0; Initial Catalog=StockDb;Integrated Security=SSPI;" name="StockDbContext" providername="System.Data.SqlClient"> 

၂)<add connectionstring="Data Source=(LocalDb)\v11.0; AttachDBFilename=|DataDirectory|\StockDB.mdf; Initial Catalog=StockDb;Integrated Security=SSPI;" name="StockDbContext" providername="System.Data.SqlClient"> 

cannot attach the file mdf as database mvc ဆိုတဲ့ error တက်ခဲ့ရင်...

Package Manager Console ထဲသွားပြီး
၁) sqllocaldb.exe stop <ENTER>
၂) sqllocaldb.exe delete <ENTER>

ပြီးရင် Application ကို Run လိုက်တာနှင့် Error ရှင်းသွားပါလိမ့်မယ်။  (မှတ်ချက်။ အခြား အခြေအနေမျိုးမှာလည်း ဖြစ်နိုင်ပါတယ်။)

Feb 2, 2017

.NET Framework ထဲက Entity Framework (EF) အကြောင်း

sagaing
.NET ထဲမှာ Entity Framework ဆိုတာ ORM (Object Relational Mapping) Framework တစ်ခုပဲဖြစ်တယ်။  ORM ဆိုတာ Object Oriented ပုံစံဖြင့် Database ထဲက Data တွေကို ကိုင်တွယ်ဆောင်ရွက်တဲ့ နည်းလမ်းပဲဖြစ်တယ်။  EF နှင့် Relational Database ကို ချိတ်ဆက်ပြီး CRUD (Create, Read, Update, Delete) အလုပ်တွေကို လုပ်တဲ့အခါမှာ Code အနည်းငယ်သာ ရေးရန်လိုအပ်တယ်။  EF ဟာ တကယ်တော့ ယခင်က .NET Framework ထဲမှာရှိပြီးသား ADO.NET ပေါ်မှာ ဖန်တီးထားတဲ့အတွက် လုပ်ဆောင်ချက်လည်း ပိုမြန်လာတယ်။

Entity Framework ကိုအသုံးပြုနိုင်ဖို့ ဘယ်လိုပြင်ဆင်မလဲ။
ASP.Net MVC Project အသစ်တစ်ခုယူလိုက်မယ်။  Project အမည်ကို SamplePrjEntityFramework လို့ပေးလိုက်တယ်။  (မှတ်ချက်။ EF ကို MVC မဟုတ်တဲ့ Project မှာလည်း အသုံးပြုလို့ရပါတယ်။)


ပြီးရင် Tools ထဲက NuGet Package Manager ထဲမှာ Package Manager Console ကို Click နှိပ်လိုက်တယ်။


Install-Package EntityFramework ဆိုတဲ့ Command ရိုက်ထည့်ပြီး Enter နှိပ်လိုက်ရင် EF ကို Project ထဲမှာ Install လုပ်ပေးလိမ့်မယ်။  လုပ်ပြီးသွားရင် Get-Package Command နှင့် Install လုပ်ထားတဲ့ Version နှင့် Project ထဲမှာရှိတဲ့ Package တွေကို ပြန်စစ်ကြည့်လို့ရတယ်။  EF Tools ကို ဒီနေရာ ကနေ Download လုပ်လို့လည်းရတယ်။

EF နှင့် Data တွေကို ကိုင်တွယ်ဆောင်ရွက်နိုင်တဲ့ နည်းလမ်းများ
EF ကို အသုံးပြုပြီး Data တွေကို ကိုင်တွယ်ဆောင်ရွက်နိုင်တဲ့နည်းလမ်း (၃) မျိုးရှိတယ်။
၁) Entity တွေကို Code ဖြင့်ရေးပြီး စတင်သည့်နည်းလမ်း။  ၄င်းကို Code First Approach လို့ခေါ်တယ်။  Developer တွေက Entity Class တွေကို Code တွေနှင့်ရေးမယ်။  Entity Class တွေရေးပြီးသွားရင် လိုအပ်တဲ့ Configuration Code တွေရေးမယ်။  စသည်ဖြင့် အကုန်လုံး Code တွေရေးပြီး လုပ်ဆောင်တာမျိုးဖြစ်တယ်။

၂) Entity တွေကို Model ဖြင့် စတင်သည့်နည်းလမ်း။  ၄င်းကို Model First Approach လို့ခေါ်တယ်။  
Model တွေကိုဘယ်လိုဖန်တီးလဲ။
Project Menu ကနေ Add New Item ထဲကိုသွားလိုက်ရင် Data ဆိုတာရှိတယ်။  Data ကနေ ADO.NET Entity Data Model ဆိုတာကို Add လုပ်ပြီး Empty EF Designer model ဆိုတဲ့ Item ကိုအသုံးပြုပြီး Model တွေကိုဖန်တီးနိုင်တယ်။

၃) Entity တွေကို Database ဖြင့် စတင်သည့်နည်းလမ်း။  ၄င်းကို Database First Approach လို့ခေါ်တယ်။ Entity ဆိုတာ Database ထဲမှာတော့ Table ဖြစ်တယ်။ Entity တွေအတွက် Table တွေကို Database ထဲမှာ ဖန်တီးတာမျိုးကိုပြောတာဖြစ်တယ်။  Database ကရှိပြီးသားလည်း ဖြစ်နိုင်တယ်။

Code First Approach ဖြင့် EF ကိုလေ့လာခြင်း။
Entity ဆိုတာ Programming ထဲမှာတော့ Class ပဲဖြစ်ပါတယ်။  တစ်စုံတစ်ခုကို ကိုယ်စားပြုတဲ့ Data Class တစ်ခုလို့ပြောရင် ပိုမှန်မယ်။  MVC မှာတော့ Data Model တစ်ခုလို့ပြောရင် ပိုမှန်မယ်။  အဲ့ဒီတော့ Data Model Class တွေကို အရင်ဦးဆုံး ဖန်တီးပေးရမယ်။  ပုံထဲက Models Folder အောက်မှာပြထားတဲ့အတိုင်း Data Model Class နှစ်ခုဖန်တီးလိုက်မယ်။
Position.cs

Employee.cs

enum ဆိုတာဘာလဲ။
Employee Class ထဲက enum ဆိုတာ C# မှာအသုံးပြုတဲ့ Keyword တစ်ခုဖြစ်ပြီး enumeration လို့ခေါ်တယ်။ enumeration ဆိုတာ မပြောင်းလဲပဲရှိနေတဲ့ Value အစုအဝေးတစ်ခုကို ပြောတာဖြစ်တယ်။ enum Value အစုအဝေးတစ်ခုကို ဖန်တီးပြီး အသုံးပြုထားတဲ့အတွက် Data တွေရဲ့ Type ကိုသေချာစွာ သတ်မှတ်သုံးစွဲနိုင်တယ်။  Employee Class မှာ Gender ခွဲခြားသတ်မှတ်ဖို့ သုံးထားတာဖြစ်တယ်။

virtual ဆိုတာဘာလဲ။
virtual ဆိုတာ C# မှာအသုံးပြုတဲ့ Keyword ဖြစ်ပြီး အခြား Class တွေက Employee Class ကိုခေါ်ယူသုံးစွဲတဲ့အခါမှာ (ဥပမာ။ Inheritance လုပ်သုံးတယ်။) ၄င်းရဲ့ Position ဆိုတဲ့ Property ကို override လုပ်ခွင့်ပေးထားခြင်းပဲဖြစ်တယ်။  Override လုပ်တယ်ဆိုတာ မိမိစိတ်ကြိုက် အဲ့ဒီ Property ကိုပြင်ဆင်၊ ချဲ့ထွင်နိုင်တာမျိုးကိုပြောတာဖြစ်တယ်။

ICollection ဆိုတာဘာလဲ။
Position Class ထဲက ICollection ဆိုတာ Collection Interface တစ်ခုဖြစ်တယ်။  C# မှာ Interface တွေကို I စကားလုံးနှင့်စပြီးသတ်မှတ်ထားတယ်။  Collection Class တွေဖြစ်တဲ့ List တို့ Dictionary တို့ကို သတ်မှတ်အသုံးပြုနိုင်တယ်။  လက်ရှိ Code ထဲမှာရေးထားတဲ့ ICollection<Employee> ဆိုတာ Employees တွေပါတဲ့ List တစ်ခုအတွက် သတ်မှတ်ထားတာဖြစ်တယ်။

Position.cs ထဲက...

public virtual ICollection<Employee> Employees { get; set; }

ဒီ Code ဟာတကယ်တော့ Navigation အတွက် အသုံးပြုတာဖြစ်တယ်။  Entity တွေဆိုတာ တစ်ခုနှင့်တစ်ခု ဆက်သွယ်နေလေ့ရှိတယ်။  အဲ့ဒီ ဆက်သွယ်မှုတွေကို One to Many, Many to One, One to One, Many to Many စသည်ဖြင့်ခေါ်ကြတယ်။  ဒီဆက်သွယ်မှုတွေကို Navigation လို့ခေါ်တယ်။  Employee တစ်ယောက်မှာ Position တစ်ခုရှိနိုင်သလို Position တစ်ခုမှာလည်း Employee တွေအများကြီးရှိနိုင်တယ်ဆိုတဲ့ ဆက်သွယ်မှုကိုပြောတာဖြစ်တယ်။

Database တစ်ခုအတွက် Class တွေဖန်တီးခြင်း
Data Model တွေတည်ဆောက်ပြီးသွားပြီဆိုရင် Database Context လို့ခေါ်တဲ့ Database တစ်ခုဖြစ်ပေါ်ဖို့ဖန်တီးပေးရမယ်။  Project ထဲမှာ DataAccessLayer လို့ခေါ်တဲ့ Folder တစ်ခုတည်ဆောက်လိုက်မယ်။


DataAccessLayer Folder ထဲမှာ EmployeeContext.cs နှင့် EmployeeInitializer.cs ဆိုတဲ့ Class နှစ်ခုဖန်တီးလိုက်မယ်။

EmployeeContext.cs


EmployeeInitializer.cs


DbContext ဆိုတာဘာလဲ။
Entity Framework မှာ အရေးပါပဲ Class တစ်ခုဖြစ်ပြီး Entity Class တွေနှင့် Database ကြားထဲမှာ Data နှင့်ပတ်သက်တဲ့ အလုပ်တွေကို ချိတ်ဆက်ပြီး အပြန်အလှန်လုပ်ဆောင်ပေးမယ့် Class တစ်ခုဖြစ်တယ်။ EmployeeContext ကို DbCotext Class ကနေ Inherit လုပ်ပြီး တည်ဆောက်ထားတာဖြစ်တယ်။  C# မှာ Inherit လုပ်ရင် (:) ကိုအသုံးပြုတယ်။  EmployeeContext ဟာ Derived Class ဖြစ်ပြီး DbContext ဟာ Base Class ဖြစ်တယ်။ base("EmployeeContext") က Database Connection String ကို သတ်မှတ်တာဖြစ်တယ်။  Connection String ကို Web.config ထဲမှာ သတ်မှတ်ပေးရမှာဖြစ်တယ်။  နောက်ပိုင်းမှာ တွေ့နိုင်ပါတယ်။

DbSet ဆိုတာဘာလဲ။
Entity Set တစ်ခုကို DbSet လို့ခေါ်တယ်။  Entity ထဲမှာရှိတဲ့ Data တွေကို CRUD (Create, Read, Update, Delete) အလုပ်တွေကို လုပ်ဖို့အတွက်ဖြစ်တယ်။  Entity Set ဟာ Collection တစ်ခုအနေနှင့်တည်ရှိတာဖြစ်တဲ့အတွက် DbSet<Employee> လို့ရေးပေးရတာဖြစ်တယ်။  အမည်ကိုလည်း Employee တွေ အများကြီးရှိမှာမို့လို့ Employees လို့ပေးလိုက်တယ်။  Database တစ်ခုတည်ဆောက်ပြီးသွားတဲ့အခါမှာ Employees နှင့် Positions ဆိုတဲ့ Table နှစ်ခုကို ရလာမှာဖြစ်တယ်။

Initializer Class က ဘာအတွက်လဲ။
Application ကို Run လိုက်တဲ့အခါမှာ Project မှာ Database မရှိခဲ့ဘူးဆိုရင် DbContext က သူ့မှာရှိတဲ့ DbSet တွေနှင့် Database တစ်ခုကို တည်ဆောက်ပေးမယ်။  Database ကို တည်ဆောက်ပြီးသွားရင် တစ်ချို့ Table တွေထဲမှာ Data တွေကို အဆင်သင့် ထည့်သွင်းပေးထားချင်တဲ့အခါမှာ Initializer Class ကိုဖန်တီးပေးရတယ်။ အခု Initializer Class ရဲ့ Base Class က DropCreateDatabaseIfModelChanges ဖြစ်တယ်။ ဒီ Class လုပ်ပေးမှာက DbContext ကဖန်တီးလိုက်တဲ့ Database ကိုနောက်ပိုင်းမှာ ပြင်ဆင်မှုတွေ လုပ်ခဲ့မယ်ဆိုရင် Database အဟောင်းကိုဖျက်ပြီး Database အသစ်ဖန်တီးတဲ့အလုပ်ကို လုပ်ပေးတယ်။  နောက်ပြီး Data အသစ်တွေထည့်လိုက်ရင်လည်း Database ထဲက Table တွေထဲကို ထည့်ပေးမှာဖြစ်တယ်။  လက်ရှိ Code ထဲမှာတော့ Position (၅)ခုကို ForEach Loop နှင့်ပတ်ထည့်ထားပြီး context.SaveChanges() နှင့်သိမ်းထားတယ်။

Web.config ထဲမှာ Configuration များထည့်သွင်းခြင်း
Database အတွက်လိုအပ်တဲ့ Class တွေဖန်တီးပြီးသွားပြီဆိုရင် Web.config ထဲမှာ Database နှင့်သက်ဆိုင်တဲ့ Configuration တွေသတ်မှတ်ပေးရမယ်။


Web.config ထဲက ပုံမှာပြထားတဲ့အတိုင်း entityFramework tag ထဲမှာ Config ကိုထည့်ပေးရမယ်။


context ထဲက type attribute မှာ SamplePrjEntityFramework.DataAccessLayer namespace အောက်မှာရှိတဲ့ EmployeeContext ကိုသတ်မှတ်ပေးရမယ်။ နောက်ပြီး context အောက်မှာ databaseInitializer ရဲ့ Type မှာလည်း EmployeeInitializer ကိုထည့်ပေးရမယ်။  ဒါတွေပြီးသွားရင် Connection String ထည့်ပေးရမယ်။ ပုံမှာပြထားတဲ့အတိုင်း entityFramework tag အပိတ်ရဲ့ အောက်မှာ ထည့်ပေးလိုက်တယ်။


name မှာ Class အမည်အတိုင်းပဲ EmployeeContext ဆိုပြီးသတ်မှတ်ပေးရမယ်။  connectionString ရဲ့ Data Source မှာ (LocalDb) MSSQLLocalDB လို့သတ်မှတ်ထားတယ်။  LocalDb ဆိုတာ SQL Server Express ထဲက Light Database Engine တစ်ခုပဲဖြစ်တယ်။  Visual Studio Environment မှာအလွယ်တကူ အသုံးပြုလို့ရတဲ့ Database Engine ဖြစ်တယ်။ (မှတ်ချက်။ တကယ်အလုပ်လုပ်တဲ့ Production Environment မှာဆိုရင်တော့ SQL Server ကိုပြန်ပြောင်းပေးရမှာဖြစ်တယ်။)  AttachDBFilename မှာ Database File သိမ်းမယ့်နေရာနှင့် အမည်ကို ညွှန်းပေးထားတယ်။  အမည်ကို Employee ပေးထားပြီး နေရာက Project ထဲက App_Data ဆိုတဲ့ Folder နေရာပဲဖြစ်တယ်။ Initial Catalog မှာ Database အမည်ကိုလည်း EmployeeDB ဆိုပြီး နာမည်ပေးလိုက်တယ်။  လောလောဆယ် Application ထဲမှာ Database ရှိမှာမဟုတ်သေးဘူး။ Application ကို Run မှသာ Project ထဲက App_Data Folder ထဲမှာ .mdf နှင့် Database တစ်ခုကို ဖန်တီးပေးမှာဖြစ်တယ်။ လောလောဆယ် Run လို့ရမှာမဟုတ်သေးဘူး ဘာလို့လည်းဆိုတော့ Project မှာ View နှင့် Controller တွေမရှိသေးတာကြောင့်ဖြစ်တယ်။

Controller နှင့် View တွေဖန်တီးခြင်း
Controller Folder မှာ Right Click နှိပ်ပြီး Add မှ Controller ကို Click နှိပ်လိုက်ရင် Dialog Box တစ်ခုထွက်လာမယ်။  Empty Controller ကိုရွေးလိုက်မယ် ပြီးရင် HomeController လို့အမည်ပေးလိုက်မယ်။


ပြီးရင် View() ပေါ်မှာ Right Click နှိပ်ပြီး Add View နှင့် View တစ်ခုထည့်လိုက်မယ်။  View name မှာ Index လို့ပေးမယ်။  Template မှာ Empty (without model) ကိုရွေးပြီး Add ကိုနှိပ်လိုက်ရင် အခုလို View နှင့် Shared View တွေ့ရလာလိမ့်မယ်။

Index.cshtml ထဲမှာလည်း အခုလိုတွေ့ရလိမ့်မယ်။


Index ကို Home လို့ပြောင်းလိုက်မယ်။  ပြီးရင် Shared အောက်က _Layout.cshtml ထဲမှာ Html ActionLink တစ်ခုထည့်လိုက်မယ်။  Home စာသားနှင့် Home Controller ထဲက Index ဆိုတဲ့ ActionResult ကိုအလုပ်လုပ်မှာဖြစ်တယ်။


ပြီးရင်နောက်ထပ် Controller တစ်ခုကို Controller ပေါ်မှာ Right Click နှိပ်ပြီး ထပ်ထည့်လိုက်မယ်။ 


ဒီ Controller ကိုတော့ Entity Framework ကိုအသုံးပြုမယ့် Controller အမျိုးအစားကိုရွေးပေးရမယ်။


Model class မှာ Employee ကိုရွေးမယ် Data context class မှာ EmployeeContext ကိုရွေးမယ်။  ပြီးရင် Add နှင့်ထည့်လိုက်တယ်။  အားလုံးပြီးသွားတဲ့အခါ Employees View နှင့် Code တွေကို အလိုလျှောက် ဖန်တီးပေးလိမ့်မယ်။



တကယ်တော့ ဒီ Code တွေဟာ Auto Generate လုပ်ပေးသွားတာ ဖြစ်တယ်။  Employee View ကို Link လုပ်ဖို့ _Layout.cshtml ထဲက ActionLink အောက်မှာ နောက်ထပ် ActionLink တစ်ခုထပ်ထည့်လိုက်မယ်။

<li>@Html.ActionLink("Employee", "Index", "Employees")</li>

ပြီးရင် Employee Controller ထဲက Code တွေထဲကတစ်ချို့ Code တွေကို ကြည့်မယ်ဆိုရင်...

private EmployeeContext db = new EmployeeContext();

Controller တစ်ခုထဲမှာ Database ထဲက Data တွေနှင့်ပတ်သက်တဲ့အပိုင်းတွေကို ဆောင်ရွက်ချင်တဲ့အခါမှာ DataAccessLayer ထဲမှာ ရေးထားတဲ့ EmployeeContext Class ကိုခေါ်ပြီးအခုလို အသုံးပြုရတာဖြစ်တယ်။

if (id == null)
{
      return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}

Employee Id က null ဖြစ်ခဲ့ရင် ဆက်လုပ်လို့မရတဲ့အတွက် HttpStatusCodeResult တစ်ခုကို return ပြန်ပေးတာ ဖြစ်တယ်။  HttpStatusCodeResult instance ထဲမှာ HttpStatusCode parameter ထည့်ပေးရမယ်။ HttpStatusCode ထဲမှာ enum values တွေပါတယ်။  လက်ရှိ Code ထဲမှာတော့ BadRequest ဆိုတဲ့ enum value ကိုအသုံးပြုထားတယ်။

ValidateAntiForgeryToken
Create, Edit, DeleteConfirmed စတဲ့ Post Action (၃)ခုမှာ အသုံးပြုထားတဲ့ Attribute တစ်ခုဖြစ်တယ်။ Data တွေပါတဲ့ Form Request တစ်ခုကို Server ဆီပို့တဲ့အခါမှာ မှန်ကန်မှုမရှိတဲ့ Data တွေကိုလက်မခံပဲ ကာကွယ်ပေးတဲ့ Attribute တစ်ခုပဲဖြစ်တယ်။  အဓိကကာကွယ်ပေးတာက Cross-Site Attack လို့ခေါ်တဲ့ Script တွေကို Data တွေနှင့်အတူထည့်သွင်းပြီး Website ကိုတိုက်ခိုက်ခြင်းတွေကိုပဲဖြစ်တယ်။

Bind Attribute
Edit နှင့် Create Post Action တွေမှာ Bind Attribute ကိုအသုံးပြုထားပြီး သူ့နောက်မှာ Employee Model သတ်မှတ်ထားတယ်။  Model ထဲက အသုံးပြုချင်တဲ့ Property တွေကို သတ်မှတ်ပြီးအသုံးပြုတာပဲဖြစ်တယ်။

Record ရှာဖွေခြင်း
Table တစ်ခုထဲမှာရှိတဲ့ Record တွေကိုရှာဖွေတဲ့အခါမှာ Find နှင့်ရှာရပါတယ်။  Primary Key သတ်မှတ်ထားတဲ့ Field ကို Find ထဲမှာထည့်ပေးရမှာဖြစ်ပါတယ်။

Employee employee = db.Employees.Find(id);

Record အသစ်ထည့်ခြင်း
Table ထဲကို Record တွေထည့်တဲ့အခါမှာ Add နှင့်ထည့်ပါတယ်။  ပြီးရင်တော့ SaveChanges နှင့် သိမ်းပေးရပါတယ်။

db.Employees.Add(employee);
db.SaveChanges();

Record ဖျက်ခြင်း
Table ထဲမှာရှိပြီးသား Record တစ်ခုကို ဖျက်ချင်တဲ့အခါမှာ၊ ဖျက်ချင်တဲ့ Record ကိုရှာဖွေပြီး Remove နှင့် ဖျက်နိုင်ပါတယ်။  ပြီးသွားရင်တော့ SaveChanges နှင့်ပြန်သိမ်းပေးရပါတယ်။

db.Employees.Remove(employee);
db.SaveChanges();

Entity Framework နှင့် Database ကိုကိုင်တွယ်ပြီး အလုပ်လုပ်တဲ့အခါမှာ Code အများကြီးရေးစရာ မလိုတဲ့အတွက် အချိန်ကုန်သက်သာသွားပါတယ်။

Application ကို Run ခြင်း
Application ကို စတင် Run လိုက်တဲ့အခါမှာ Home Controller ရဲ့ Index View အရင်ပေါ်လာပါလိမ့်မယ်။

Employee ကို သွားလိုက်ရင် Employee Controller ရဲ့ Index ကိုအလုပ်လုပ်တဲ့အခါမှာ Employee List ကို View ထဲမှာပြထားတာဖြစ်တဲ့အတွက် Table တစ်ခုအနေနှင့် ပြပေးမှာဖြစ်တယ်။

Employee Controller ကို စတင်အလုပ်လုပ်တာနှင့် Database ဖိုင်ကို Project ထဲက App_Data Folder ထဲမှာ ဖန်တီးပေးမှာဖြစ်ပါတယ်။


Create New နှင့် Employee Record အသစ်တစ်ခုထည့်ကြည့်လိုက်တယ်။

Create ကို Click နှိပ်လိုက်တယ်...

Employee Record တစ်ခုဝင်သွားတယ်။  Table ရဲ့ ညာဘက်မှာ Edit, Detail နှင့် Delete ဆိုတဲ့ Links တွေပေါ်လာမယ်။   ထည့်လိုက်တဲ့ Record ဟာ Database ထဲကိုရောက်မရောက် စစ်ကြည့်ချင်တယ်ဆိုရင် SQL Server Object Explorer မှတဆင့် Table ထဲမှာ စစ်ကြည့်လို့ရတယ်။


တကယ်တော့ ဒီ Application ဟာပြီးပြည့်စုံတဲ့ Application တစ်ခုတော့မဟုတ်သေးပါဘူး။  Application မှာ လိုအပ်ချက်တွေ ရှိနေပါသေးတယ်။  Entity Framework နှင့်ပတ်သက်လို့ကတော့ ဒီလောက်ပါပဲ။

Jan 31, 2017

'Ajax' does not exist in the namespace 'System.Web.Mvc' Error ဖြစ်ခြင်း

sagaing
ASP.Net MVC Empty Project တစ်ခုကိုယူလိုက်တဲ့အခါ Project ထဲမှာပါလာတဲ့ System.Web.Mvc Assembly ဖိုင်ဟာ Old Version ဖြစ်နေခဲ့ရင် Application ကို Run လိုက်တဲ့အခါမှာ အောက်ပါ Error ဖြစ်လေ့ရှိပါတယ်။  အကယ်၍ Empty Project မဟုတ်ပဲ MVC Web Application ဆိုရင်တော့ Error မဖြစ်ပါဘူး။  ဘာလို့လည်းဆိုတာ့ Assembly File ဟာ Updated ဖြစ်တဲ့ File ပါလာလို့ပါ။

ဖြေရှင်းနည်း (၁)
၁) Manage NuGets Package for Solutions ကိုသွားပါ။
၂) Microsoft ASP.NET MVC Package ကို Install လုပ်ပေးလိုက်ပါ။

ဖြေရှင်းနည်း (၂)
၁) Package Manager Console ကိုသွားပါ။
၂) Uninstall-Package Microsoft.AspNet.Mvc Command နှင့် လက်ရှိရှိနေတဲ့ Assembly File ကို Uninstall လုပ်လိုက်ပါ။
၃) Install-Package Microsoft.AspNet.Mvc Command နှင့် Install ပြန်လုပ်လိုက်ပါ။

အဲ့ဒီနည်းလမ်း (၂) ခုထဲကတစ်နည်းနည်းနှင့် ဖြေရှင်းပြီးသွားရင် MVC Assembly File Update ဖြစ်သွားတဲ့အတွက် Error ရှင်းသွားပါလိမ့်မယ်။

Dec 18, 2016

ASP.Net MVC ရဲ့ Route Config အကြောင်း

sagaing


Routing ဆိုတာဘာလည်း။
ASP.Net MVC မှာ Routing ဟာ MVC ရဲ့ အဓိက လုပ်ဆောင်ချက် တစ်ခုဖြစ်တယ်။  Routing ဆိုတာ Controller တွေရဲ့ Action တွေကို Request လုပ်ဖို့ရန် Mapping ပြုလုပ်တဲ့ URL Pattern (ပုံစံ) ကိုပြောတာ ဖြစ်တယ်။  ASP.Net MVC Project တစ်ခုမှာ အသင့်သတ်မှတ်ထားတဲ့ Rout Mapping ပုံစံက...

http:///{controller}/{action}/{id} ဆိုပြီးသတ်မှတ်ထားတယ်။  ဥပမာ Physical ပုံစံက...
http://www.domain.com/Employee/Edit/id=1 ဒီလိုတွေ့နိုင်သလို
http://www.domain.com/Employee/Edit/1 ဒီလိုလည်းတွေ့နိုင်တယ်။

Configuration ဆိုတာဘာလည်း။
Computer နယ်ပယ်ထဲမှာ အမြဲကြားနေရတဲ့ စကားလုံးတစ်ခုဖြစ်တဲ့ Configuration ဆိုတာ ထည့်သွင်းသည်။  သတ်မှတ်သည်။ လို့ အဓိပ္ပာယ် ရပါတယ်။  ASP.Net MVC မှာ Route တွေကို Configuration လုပ်ဖို့ရန်အတွက် Class ဖိုင် တစ်ဖိုင်ပါပါတယ်။  အဲ့ဖိုင်နာမည်က RouteConfig.cs ဖိုင်ပါ။  အဲ့ဒီဖိုင်ထဲမှာ ASP.Net MVC Application တစ်ခုအတွက် Route တစ်ခုသတ်မှတ်ပြီးသားလည်း ပါပါတယ်။  RouteConfig.cs ဖိုင်ထဲမှာ အောက်ဖေါ်ပြပါအတိုင်း Code တွေကို တွေ့မြင်နိုင်ပါတယ်။
ဒီ Class ဖိုင်ထဲမှာ RegisterRoutes ဆိုတဲ့ void method တစ်ခုရှိတယ်။  သူ့ထဲမှာ အရင်ဆုံး စတွေ့ရမှာက routes.IgnoreRoute ဆိုတာတွေ့လိမ့်မယ်။  ကျွန်တော်တို့ Application တစ်ခုမှာ Route မလုပ်စေချင်တဲ့ နေရာတွေကို သတ်မှတ်ချင်တဲ့အခါမှာ သုံးတဲ့ လုပ်ဆောင်ချက်ဖြစ်တယ်။ ဖိုင်ထဲမှာ အသင့်သတ်မှတ်ထားတဲ့ Code ကတော့ .axd extension နှင့်ဆုံးတဲ့ resource တွေနှင့် သူ့နောက်က လိုက်တဲ့ဟာတွေ အကုန်လုံးကို route မလုပ်စေချင်တဲ့အတွက် ကန့်သတ်ထားတာဖြစ်တယ်။  အကယ်လို့ ကျွန်တော်တို့က Employee Controller ကို Route မလုပ်စေချင်ဘူး ဆိုပါစို့ ဘာလို့လည်းဆိုတော့ Employee နှင့်ပတ်သတ်တဲ့ Actions တွေမှာ Error ဖြစ်နေတဲ့အတွက် ပြင်နေတယ်၊ ဒါမှမဟုတ် ပြည့်စုံမှုမရှိသေးတဲ့အတွက် Route ကိုပိတ်ထားချင်တယ်ဆိုရင် IgnoreRoute ကိုသုံးလို့ရတယ်။  ဘယ်လိုသုံးမလည်းဆိုတော့...

routes.IgnoreRoute("Employee");

ဆိုပြီး ရေးထားရင် Employee Controller ကို Application က Route မလုပ်တော့ဘူး။  လုပ်ခဲ့ရင်လည်း Error တစ်ခုတက်လိမ့်မယ်။  နောက်တစ်ကြောင်းက routes.MapRoute သူကကြတော့ ဘာလုပ်တာလည်းဆိုတော့ ရှင်းပါတယ်။  Route Mapping လုပ်တာဖြစ်တယ်။ သူ့ထဲမှာ ကြည့်ရင် name, url, defaults ဆိုပြီးပါတယ်။ name က Route နာမည် url က သူအလုပ်လုပ်မယ့် map pattern (ပုံစံ) defaults ကတော့ Application စပြီး အလုပ်လုပ်တဲ့အခါမှာ အရင်ဆုံး စအလုပ်လုပ်မယ့် Controller နှင့် Action နာမည် ပြီးရင် id ဆိုတာကတော့ Action မှာ လိုအပ်ရင် ထည့်သုံးမယ့် parameter သူကတော့ ရှိရင်လည်း ရှိမယ် မရှိရင်လည်း မရှိဘူးဆိုတဲ့ အနေအထား ဖြစ်တယ် ဒါကြောင့် UrlParameter.Optional ဆိုပြီး သတ်မှတ်ထားတာဖြစ်တယ်။  သူ့နောက်မှာ နောက်ထပ် constraints ဆိုတာ ထပ်ထည့်လို့ရသေးတယ် ဥပမာ
Employee ဆိုတဲ့ Route မှာ constraints ဆိုတာထည့်ထားတယ်။  Employee Controller ရဲ့ Edit ဆိုတဲ့ Action မှာ ထည့်ထားတယ်။  Default Route မှာ ထည့်ရင် Error တက်မယ် ဘာလို့လည်းဆိုတော့ ဒီ Application ကို Run လိုက်ရင် Default Route ပုံစံအရ အခုလို Browser မှာ ဥပမာ ဒီလို မြင်ရလိမ့်မယ်...

http://localhost:51255/Home/Index 

Home နှင့် Index ကပါလည်းရတယ် မပါလည်းရတယ် အဲ့ဒီမှာ Home Controller ရဲ့ Actions တွေမှာ id ဆိုတဲ့ Parameter မသုံးဘူး မသုံးတဲ့အတွက် constraints ထည့်ခဲ့ရင် Error တက်မှာဖြစ်တယ်။  Employee Controller မှာကြတော့ Edit, Delete, Detail စတာတွေမှာ id ဆိုတာ သုံးတယ် အဲ့အတွက် Error တက်မှာ မဟုတ်ဘူး။  အကယ်လို့ ဒီလိုဆိုရင် Error တက်မယ်...

http://localhost:51255/Employee/Edit/Kyaw Kyaw

ဘာလို့လည်းဆိုတော့ id အတွက်သတ်မှတ်ထားတဲ့ constraints က \d+ ဆိုတာ digit သို့ number အတွက်ပဲ သတ်မှတ်ထားတာ အခု URL မှာ id နေရာမှာ Kyaw Kyaw ဖြစ်နေတဲ့အတွက် Error တက်မှာဖြစ်တယ်။

အိုခေ အခုထိ ကျွန်တော့်ပြောခဲ့တဲ့ Routing အမျိုးအစားက Convention Routing ဖြစ်တယ်။  Routing မှာ ၂မျိုးရှိတယ်။

၁) Convention Routing ရယ်
၂) Attribute Routing ဆိုပြီးတော့ ၂မျိုးရှိတယ်။

Convention Routing က အရမ်း General ဖြစ်တယ်။  သက်ဆိုင်ရာ Actions တွေအတွက် လိုအပ်သလို အမည်တွေ သတ်မှတ်လို့မရဘူး။  အဲ့ဒီ အားနည်းချက်တွေကြောင့် MVC 5 ကစပြီး Attribute Routing ပါလာတယ်။  သူက သုံးရတာ အရမ်းအဆင်ပြေတယ်။  သက်ဆိုင်ရာ Actions တွေအတွက် Attribute တွေ သတ်မှတ်လို့ရတယ်။  Convention Routing ကို Configure လုပ်မယ်ဆိုရင် RouteConfig.cs ဖိုင်ထဲမှာ လုပ်ရုံပဲ Attribute Routing ကြတော့ RouteConfig.cs ဖိုင်ထဲမှာ Attribute Routing ကိုသုံးဖို့ အောက်မှာ ပြထားတဲ့ Code တစ်ကြောင်းရေးပေးရတယ်။

routes.MapMvcAttributeRoutes();

ကျန်တဲ့ Attribute တွေကိုတော့ Controller ရဲ့ Actions တွေထဲမှာ လိုက်ရေးရတယ်။  Application တစ်ခုမှာ Convention Routing နှင့် Attribute Routing နှစ်မျိုးလုံး ပေါင်းစပ်သုံးလို့ရတယ်။  Attribute Routing ကိုဘယ်လိုသုံးလည်းဆိုတာ နမူနာအနေနှင့် ပြောရမယ်ဆိုရင်...ဥပမာ Employee Controller ထဲမှာ Index ဆိုတဲ့ ActionResult တစ်ခုရှိတယ် ဆိုကြပါစို့...ပုံမှန်အားဖြင့် Employee Controller ရဲ့ Index ကို အလုပ်လုပ်ရင် Browser မှာ အောက်ပါအတိုင်း URL ကိုတွေ့ရမှာ ဖြစ်တယ်။

http://localhost:51255/Employee

Index ဟာ Controller တစ်ခုရဲ့ Default ActionResult ဖြစ်တဲ့အတွက် URL မှာ မပါတာဖြစ်တယ်။  ထည့်လည်းရတယ်။  ဥပမာ...

http://localhost:51255/Employee/Index

ဒီ URL နှစ်ခုဟာ အတူတူပဲဖြစ်တယ်။  အခုကျွန်တော် Index ActionResult မှာ Attribute ထည့်မယ်။  Attribute Routing ကိုသုံးချင်တဲ့အတွက် ဒါဆိုရင်...

[Route("Employee/All")]
public ActionResult Index()
{
...........
...........
...........
}

ဒီ ActionResult မှာ [Route("All")] ဆိုတာထည့်ထားတယ် အဲ့ဒါက Route လုပ်ဖို့ Attribute ပဲဖြစ်တယ်။  ဒီ Action ကိုအလုပ်လုပ်ဖို့ရန် Browser မှာ ဘယ်လို Route လုပ်ရမှာလည်းဆိုတော့...

http://localhost:51255/Employee/All

အခုလိုမျိုး Route လုပ်မှ အလုပ်လုပ်မှာဖြစ်တယ်။  အကယ်၍ Employee ဆိုတဲ့ Route Attribute ကို ActionResult မှာထည့်လည်းရတယ် တကယ်လို့ Employee ဆိုတဲ့ Route Attribute ဟာ အခု Controller ရဲ့ Actions တွေအကုန်လုံးအတွက် အသုံးပြုမယ့် Attribute ဖြစ်နေတယ်ဆိုရင် Controller မှာ Configure လုပ်ဖို့ RoutePrefix ဆိုတာရှိတယ် အောက်ပါအတိုင်း Configure လုပ်လို့ရတယ်။

[RoutePrefix("Employee")]
public class EmployeeController : Controller
{
.......................
.......................
.......................
}

ဒါဆိုရင် ဒီ Controller ကို Route လုပ်ရင် Employee Attribute မှ တဆင့် အခြား ActionResult တွေအလုပ်လုပ်မှာ ဖြစ်တယ်။  အောက်ပါ ပုံစံအတိုင်း ကျွန်တော့်တို့ Visual Studio ထဲမှာ တွေ့ရမှာပါ။


အဲ့ဒီမှာ Detail ActionResult ဟာ Index နှင့်မတူပဲ {id} ဆိုတာပါနေတယ်။  အဲ့ဒါက parameter id ကိုကိုယ်စားပြုတာပဲဖြစ်တယ်။  ဒီလို {id} ကိုသတ်မှတ်တဲ့အခါမှာ နောက်ထပ် constraints တွေထည့်လို့ရတယ်။  ဥပမာ...

[Route("EmployeeId/{id:int}")] ဒီ Config က id ကို integer ပဲလက်ခံမယ်လို့ သတ်မှတ်တာဖြစ်တယ်။ အကယ်၍ string ဖြစ်တယ်ဆိုရင် error ဖြစ်မယ်။  ဥပမာ...

http://localhost/Employee/EmployeeId/Kyaw Kyaw ဒီ URL နှင့် Route လုပ်ခဲ့မယ်ဆိုရင် error ဖြစ်မယ်။

နောက်ထပ်ဘာတွေ သတ်မှတ်လို့ ရသေးလည်းဆိုတော့...
[Route("EmployeeId/{id=3}")]  Default value သတ်မှတ်တာဖြစ်တယ်။  id မှာ value တစ်ခုမှပါမလာရင် 3 ကို သတ်မှတ်မှာဖြစ်တယ်။  Route Constraint တွေကို ဒီမှာ ထပ်ပြီးလေ့လာနိုင်ပါတယ်။  Attribute Routing ဟာ e-commerce လိုမျိုး site တွေမှာ သုံးရင် SEO အတွက် Convention Routing ထက် ပိုမိုကောင်းမွန်တဲ့ Route တွေဖန်တီးနိုင်တယ်။  ဒီ Routing နှင့်ပတ်သက်တဲ့ အကြောင်းကို Video အနေနှင့် ကြည့်ချင်တယ်ဆိုရင်...



ကျွန်တော်ဖန်တီးထားတဲ့ ဒီ Video မှာကြည့်လို့ရပါတယ်။

Dec 15, 2016

ASP.Net MVC ၏ Bandling နှင့် Minification ဆိုတာဘာလဲ။

sagaing
ASP.Net MVC ၏ Bandling and Minification အကြောင်းကိုရှင်းပြထားပါတယ်။

- Bandling နှင့် Minification ဆိုတာဘာလည်း။
- ဘာကြောင့်သုံးတာလည်း။
- ဘယ်လိုသုံးတာလည်း။
- ဘာတွေကောင်းလည်း။

ဆိုတာတွေကို ရှင်းပြပေးထားပါတယ်။


ASP.Net MVC ကို စတင် လေ့လာချင်သူတွေအတွက်

သင်ခန်းစာ (၁) Start Learning ASP.Net MVC Programming
https://www.youtube.com/watch?v=cke1Q...

သင်ခန်းစာ (၂) Developing a MVC Project from Scratch
https://www.youtube.com/watch?v=kAxvp...

သင်ခန်းစာ (၃) What is ViewData, ViewBag, TempData & Session in ASP.Net MVC?
https://www.youtube.com/watch?v=el5di...

သင်ခန်းစာ (၄) Using Data Annotation
https://www.youtube.com/watch?v=v0pW7...

ယခု သင်ခန်းစာမှာ အမှတ် (၅) ဖြစ်ပါသည်။

ASP.Net MVC ၏ Data Annotation များကို အသုံးပြုခြင်း

sagaing
ASP.Net MVC မှာ Data Annotation တွေကို ဘယ်လိုသုံးလည်းဆိုတာ ရှင်းပြထားတာပါ။

- Data Annotation ဘာလည်း။
- ဘာကြောင့်သုံးတာလည်း။
- ဘယ်လိုသုံးတာလည်း။

ဆိုတာတွေကို ရှင်းပြပေးထားပါတယ်။


ASP.Net MVC ကို စတင် လေ့လာချင်သူတွေအတွက်

သင်ခန်းစာ (၁) Start Learning ASP.Net MVC Programming
https://www.youtube.com/watch?v=cke1Q6Jeb5k

သင်ခန်းစာ (၂) Developing a MVC Project from Scratch
https://www.youtube.com/watch?v=kAxvpke7u-I

သင်ခန်းစာ (၃) What is ViewData, ViewBag, TempData & Session in ASP.Net MVC?
https://www.youtube.com/watch?v=el5diAYL510

ယခု သင်ခန်းစာမှာ အမှတ် (၄) ဖြစ်ပါသည်။

Dec 14, 2016

ASP.Net MVC မှာ ViewData, ViewBag, TempData နှင့် Session ဆိုတာ ဘာတွေလဲ။

sagaing
ASP.Net MVC မှာ အချက်အလက်၊ တန်ဖိုးကိန်းဂဏန်း တွေကို တစ်နေရာမှတစ်နေရာသို့ ပေးပို့တဲ့အခါမှာ အမြဲတမ်းအသုံးပြုရတဲ့ Object တွေအကြောင်းကို ရှင်းပြထားပါတယ်။

ASP.Net MVC ရဲ့ Object တွေဖြစ်တဲ့...

- ViewData အကြောင်း
- ViewBag အကြောင်း
- TempData အကြောင်း
- Session အကြောင်း

စတာတွေကိုအဓိက နားလည်သဘောပေါက်သွားမှာဖြစ်ပါတယ်။


ASP.Net MVC ကို စတင် လေ့လာချင်သူတွေအတွက်

သင်ခန်းစာ (၁) Start Learning ASP.Net MVC Programming
https://www.youtube.com/watch?v=cke1Q...

သင်ခန်းစာ (၂) Developing a MVC Project from Scratch
https://www.youtube.com/watch?v=kAxvp...

ယခု သင်ခန်းစာမှာ အမှတ် (၃) ဖြစ်ပါသည်။

ASP.Net MVC Project တစ်ခုကို အစကနေ ဘယ်လိုဖန်တီးမလဲ။

sagaing
ASP.Net MVC Project တစ်ခုကို Scratch ကနေ ဘယ်လိုစတင်ပြီး ဖန်တီးတယ်ဆိုတာ အဆင့်လိုက် ရှင်းပြပေးထားပါတယ်။

- CRUD Concept အခြေခံ
- MVC Request နှင့် Response အလုပ်လုပ်ပုံ
- Collection ထဲက List အကြောင်း
- LINQ အခြေခံ
- Session နှင့် TempData တို့ရဲ့ အလုပ်လုပ်ပုံ
- ViewBag ဆိုတာဘာလည်း
- Auto Generated Code တွေအကြောင်း

စတာတွေကို အခြေခံအားဖြင့် နားလည်သွားမှာဖြစ်ပါတယ်။


Dec 9, 2016

ASP.Net MVC ကိုစတင် လေ့လာချင်သူများအတွက်

sagaing

ASP.Net MVC အကြောင်းကို မြန်မာလို အခြေခံရှင်းပြထားပါတယ်။

- Model ဆိုတာဘာလည်း။
- View ဆိုတာဘာလည်း။
- Controller ဆိုတာဘာလည်း။
- Routing ဆိုတာဘာလည်း။

စတာတွေကို အခြေခံအားဖြင့် နားလည်သွားမှာဖြစ်ပါတယ်။


ကိုစစ်ကိုင်း

May 27, 2011

ASP.Net GridView Column Width Auto Adjust

sagaing

ASP.Net မှာ Data တွေကို ပြဖို့ GridView ကိုသုံးကြပါတယ် အဲ့လိုသုံးတဲ့အခါ ပြချင်တဲ့ Data Field ကနည်းနည်းလေးဆို ကိစ္စမရှိပေမယ့် များလာပြီဆို GridView Column Width တွေချိန်ညှိရတာ တကယ် စိတ်ပျက်စရာပါ။  အခုဟာက Code အနည်းငယ်ထည့်ပြီး Columns တွေကို Auto Adjust လုပ်ခိုင်းတဲ့ သဘောပါ။  Code ကလည်း css Code လေးပါဘဲ။  GridView မှာ လိုအပ်တဲ့ Data တွေ Bind လုပ်ပြီးပြီဆိုရင် GridView ရဲ့ RowDataBound Event ထဲမှာ အောက်ပါ Code လေးထည့်လိုက်ပါ။

    protected void gvwMyGView_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        for (int i = 0; i < e.Row.Cells.Count; i++)
        {
            e.Row.Cells[i].Attributes.Add("style", "white-space:nowrap;");
        }
    }

ASP.Net Server Control တစ်ခုထဲကို Client Code (JavaScript, css, etc) တွေထည့်ချင်တဲ့အခါ Attributes.Add(key, value) ကိုသုံးပါတယ်။  style ကတော့ css style ကိုသုံးမယ် white-space:nowwarp; ကတော့နောက်တလိုင်းကို မဆင်းခိုင်းတာပါ။  ဒီ Code လေးထည့်လိုက်တာနဲ့ ကျွန်တော်တို့ GridView မှာရှိတဲ့ Columns တွေဟာ Auto Adjust ဖြစ်သွားပါတော့တယ်။

ကိုစစ်ကိုင်း

Apr 18, 2011

ConnectionString ထဲက instance name

sagaing
A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)

ဒီ Error က ASP.Net(C#) က‌နေ SQL Server ကိုလှမ်းချိတ်တဲ့အခါမှာ  SQL Server ရဲ့ instance name ကို ASP.Net(C#) ကရှာ မ‌တွေတဲ့ အချိန်မှာဖြစ်တတ်တဲ့ Error ပါ။

Web.config ဖိုင်ထဲမှ SQL Server Connection String
    <connectionStrings>
        <add name="myConnection" connectionString="server=mySQLServer; Database=HiStock;UID=myuser1;PWD=user1pwd;Connection Timeout=60;" providerName="System.Data.SqlClient"/>
    </connectionStrings>

Oct 15, 2010

Google Street View API အသုံးပြုခြင်း

sagaing

Street View ဆိုတာ Google Map မှတဆင့် မိမိကြည့်ချင်တဲ့ ‌နေရာတစ်ခုမှပုံရိပ်‌တွေကို 360 degree လှည့်ပတ်ကြည့်ရှုနိုင်တဲ့ Google ရဲ့ နည်းပညာတစ်ခုဖြစ်ပါတယ်။  Street View က Flash plugin ကိုအသုံးပြုပြီး အလုပ်လုပ်တာပါ။  အခုအချိန်မှာ Browsers ‌တော်တော်များများဟာ Flash plugin ကို supported လုပ်နိုင်ပါတယ်။  ‌နောက်ဆုံး Street View နည်းပညာမှာ ထပ်‌ပေါင်းထည့်ထားတာက မိမိကြည့်‌နေတဲ့ ‌နေရာတစ်ခုမှ ဓါတ်ပုံ‌တွေကိုပါ Panaramio နှင့် Picasa Website ‌တွေမှ တဆင့် Street View မှာ စုစည်း‌ဖေါ်ပြပေးတဲ့ လုပ်‌ဆောင်ချက်ပါ ပါဝင်လာပါပြီ။  Street View ဟာ Client Code နှင့် အလုပ်လုပ်တာ‌ေကြာင့် HTML Page ‌တွေမှာ‌ရော Server Page ‌တွေမှာပါ အလုပ်လုပ်နိုင်ပါတယ်။  Street View ကို Web Page တစ်ခုမှာ အသုံးပြုမယ်ဆိုရင် Street View API ကို အခုလိုလှမ်း‌ခေါ်ထားရပါမယ်။

<scriptsrc="http://maps.google.com/mapsfile=api&amp;v=2.x&amp;key=ABQIAAAAkSMDTOtwTPM0TC1KBP9nTBTwL9WvRaWIiG8lhvgtZ1YK86EPWhRsBP4eCzj2VdeliUAYQ39q3qYXrQ" type="text/javascript"></script>

(Street View API)
ကိုစစ်ကိုင်း၏ မှတ်စုများ. Powered by Blogger.