Controller Action အားလေ့လာကြည်ခြင်း

Action Method တွေဟာ တခြား .net method တွေလိုပဲ Process လုပ်ဖို့ Input data တွေလိုပါတယ်။ Data တွေကလည်း Source ပေါင်းစုံကနေလာနိုင်ပါတယ်။ ဥပမာ အနေနဲ့

  • Environment
  • Operating System
  • User Request
  • Direct Parameters

စတဲ့နေရာတွေကနေ ရောက်လာနိုင်ပါတယ်။ ဒါပေမယ့် Source တွေဘယ်လောက်ပဲများများ အဓိကခွဲလိုက်ရင်တော့ Data ရောက်လာနိုင်တဲ့နေရာက ၃ မျိုးပဲရှိပါတယ်။ အဲဒါတွေကတော့

  • Context Object
  • Method Parameter
  • Model Bindings

တို့ဖြစ်ပါတယ်။

Context Object

ဘယ်လို web request တွေပဲဖြစ်ဖြစ် အသုံးဝင်တဲ့ information တွေတွဲပါလာပါတယ်။ ဥပမာ

  • Http Headers
  • User Information
  • Browser Information
  • User’s IP Address
  • Authenticatoin Information

အဲဒါတွေက Context object အမျိုးအစားထဲမှာ ပ ါ၀င်ပါတယ်။ Coding လေးနဲ့စမ်းကြည့်ကြရအောင်။ HomeController ထဲမှာ GetContextInfo ဆိုတဲ့ Action Method မှာရေးပါမယ်။

Function GetContextInfo() As String
            Dim result As String = String.Empty

            result = "User:" + User.Identity.Name + "<br/>" _
                + "Server:" + Server.MachineName + "<br/>" _
                + "Script Timeout:" + Server.ScriptTimeout.ToString + "<br/>" _
                + "User IP:" + Request.UserHostAddress + "<br/>" _
                + "Browser:" + Request.UserAgent + "<br/>" _
                + "Http Method:" + Request.HttpMethod + "<br/>" _
                + "Controller:" + RouteData.Values("Controller") + "<br/>" _
                + "Action:" + RouteData.Values("action") + "<br/>" _
                + "ID:" + RouteData.Values("id")

            Return result

   End Function

Application ကို Run ကြည့်ရင် အောက်က ပုံအတိုင်းမြင်ရမှာပါ။

အဲဒီမှာ ID မှာ ဘာမှ မပါလာတာကို သတိထားမိမှာပါ။ တကယ်လို့ Browser မှာ

http://localhost:(randomport)/home/Getcontextinfo/4

လို့ ပြောင်းရိုက် လိုက်ရင် ID မှာ 4 လို့ပေါ်လာမှာပါ။

Input Paremeters

Action method တွေကို process လုပ်ဖို့ လိုအပ်တဲ့ Data တွေကို Method ရဲ့ parameters တွေကနေလည်း ရရှိနိုင်ပါတယ်။ Method Parameters တွေကို Action Invoker က ရွေးချယ်တဲ့ နေရာမှာ အောက်ကလို အစဉ်လိုက်ရွေးချယ်ပါတယ်။

  1. Request.Form
  2. RouteData.Values
  3. Request.QueryString
Function UseParameter(ByVal ID As String, ByVal Name As String) As String
            Dim result As String = String.Empty

            result = "ID:" + ID + "<br/>" _
                + "Name:" + Name

            Return result

End Function

အပေါ်က UseParameter Action Method ကို HomeController မှာရေးပါမယ်။ အဲဒီ Method မှာ Paremeter ၂ ခုပါပါတယ်။ String အမျိုးအစားတွေဖြစ်တဲ့ ID နဲ့ Name ပါ။ Browser မှာ run ကြည့်ရင် အောက်က ပုံအတိုင်းတွေ့ရမှာပါ။

ID ,Name ၂ ခုလုံး Blank တွေဖြစ်နေတာကို သတိထားမိမှာပါ။ တကယ်လို့ Browser မှာ

http://localhost:(randomport)/home/useparameter/5

လို့ရိုက်ကြည့်လိုက်ရင် ID မှာ 5 လို့ပြပေးမှာဖြစ်ပါတယ်။ တကယ်လို့

http://localhost:(randomport)/home/useparameter?id=45

လို့ရိုက်ကြည့်ရင် ID မှာ 45 လို့ပြပေးမှာပါ။ ဒါဆို UserParameter Action method ထဲက ID Parameter က ဘယ်လိုအလုပ်လုပ်သလဲလို့ မေးစရာရှိပါတယ်။ အပေါ်မှာပြောခဲ့ပြီးတဲ့ Order အတိုင်းလုပ်ပါတယ်။

ပထမဦးစားပေး Request Form ကိုလုပ်ပါတယ်။ Request Form မှာ အဲဒီ Paramater Name နဲ့တူတာမရှိဘူးဆိုရင် Route value ကိုလုပ်ပါတယ်။ Route Value မှာလည်း အဲဒီ Parameter မရှိဘူးဆိုရင်။ QueryString ကိုလုပ်ပါတယ်။ တကယ်လို့ QueryString မှာလည်း မပါဘူး ဆိုရင်တော့ Blank တွေ လုပ်သွားမှာပါ။

အပေါ်က ဥပမာ အရကြည့်ရင် ပထမ တခေါက်တုန်းက ID Parameter value ကို Route value ကနေ ယူပါတယ်။ ဒုတိယအကြိမ်မှာတော့ ID Parameter value ကို query string ကနေ ယူပါတယ်။ တကယ်လို့ browser မှာ

http://localhost:(randomport)/home/useparameter/100?id=9

လိို့ရိုက်ကြည့်ရင် ID value ကို ဘယ်လောက်နဲ့ လုပ်မလဲဆိုတော့ 100 နဲ့လုပ်ပါမယ်။ Order rule အရပါ။ တကယ်လို့ Request Form မှာ ID တန်ဖိုး ပါလာခဲ့ရင်တော့ Request Form က ID value နဲ့အလုပ်လုပ်ပါမယ်။ တကယ်လို့ Browser မှာ

http://localhost:(randomport)/home/useparameter/100?id=9&name=mg mg

လို့ရိုက်ကြည့်ရင်တော့ ID:100 နဲ့ Name:mg mg ဆိုပြီး ပြပေးမှာဖြစ်ပါတယ်။ တကယ်လို့ Request Form မှာ ပေးထားတဲ့နာမည်၊ Route Value မှာပေးထားတဲ့နာမည် နဲ့ Query String ကနေ ရောက်လာတဲ့ နာမည်တွေ တူနေပြီး သီခြား အလိုက် အလုပ်လုပ်ချင်တယ် ဆိုရင်တော့ Request.Form, Routedata.Values, Request.QueryString စတဲ့ ဆိုင်ရာ Function တွေကို တိုက်ရိုက် ယူသုံးလို့ရပါတယ်။

Model Bindings

Action method ထဲက data တွေဟာ Model တွေဆီကနေလည်းရောက်လာနိုင်ပါတယ်။ ဥပမာလေးနဲ့စမ်းကြည့်ပါမယ်။ Model folder ထဲမှာ Dog class တစ်ခုကို တည်ဆောက်လိုက်ပါတယ်။

Imports System.ComponentModel.DataAnnotations

Public Class Dog

    <Required(ErrorMessage:="ID must be enter")>
    Public Property ID As Integer
    <Required(ErrorMessage:="ID must be enter")>
    Public Property Name As String
    <Required(ErrorMessage:="ID must be enter"), Range(0, 20, ErrorMessage:="Must be between 0 and 20")>
    Public Property Age As Integer

End Class

Dog class ကိုစမ်းသပ်ဖို့အတွက် HomeController ထဲမှာ ListDog ဆိုတဲ့ Action method တစ်ခုကိုရေးပါတယ်။

Function ListDog() As ActionResult
            Dim d As New Dog
            d.ID = 1
            d.Age = 15
            d.Name = "Rambo"
            Return View(d)
End Function

ListDog အတွက် View ကိုတည်ဆောက် ပေးရပါအုံးမယ်။ အဲဒီအတွက် ဘယ်လို လုပ်ရတယ်ဆိုတာကို နောက်အခန်းတွေမှာ အသေးစိတ် ဆက်ရေးပါအုံးမယ်။

ဒီ article မှာ Controller တွေရဲ့ action method တွေဟာ Process လုပ်ဖို့အတွက် Data တွေကို Source အမျိုးမျိုးကနေ ရယူပြီး အသုံးချတယ် ဆိုတာကိုသာ အဓိက တင်ပြလိုခြင်း ဖြစ်ပါတယ်။

Facebook comments:

Leave a comment


*