ASP.NET MVC實踐系列-表單處理

iDotNetSpace發表於2009-11-30

其實這應該算是一個很簡單的話題,但是由於webform為我們封裝的太多,很多人對這部分的原理並不是特別清楚,搞得這個表單提交在ASP.NET MVC中好像很神祕似得,下面我就來幫大家揭揭祕,當然高手就別看了會浪費你的時間的。

一、基礎知識

HTTP請求有兩種方式GET與POST,理論上說,GET是從伺服器上請求資料,POST是傳送資料到伺服器。事實上,GET方法是把資料引數佇列(query string)加到一個URL上,名字和值是一一對應的。比如說,name=lfm。在佇列裡,各組資料用一個&符號分開,空格用+號替換,特殊的符號轉換成十六進位制的程式碼。因為這一佇列在URL裡邊,這樣佇列的引數就能看得到,可以被記錄下來,或更改。通常GET方法還限制字元的大小(我測試了一下大概4083,大於4083直接被截斷,不報錯 )。事實上POST方法可以沒有限制的傳遞資料到伺服器,使用者在瀏覽器端是看不到這一過程的。接下來要講的這個表單提交使用的就是post方式。

二、CheckBox

1、Html.CheckBox:這是ASP.NET MVC中提供的一個Helper,它會生成一個input-checkbox和一個同名的input-hidden,比方說我們的view為:

 

程式碼
      {%>
   
   
   
 

則會生成:

 

程式碼
 




   
   
 

為什麼要有這麼一個input-hidden呢,我們都知道checkbox在提交時如果不選中則將不被提交到伺服器端,所以有時我們可能希望如

果不選中也提交到伺服器端,這個input-hidden就是幹這個的,不過這裡實現的有點蹩腳,當選中時會有兩個同名的表單項,一個值

為TRUE,一個值為FALSE。
當controller為如下時:
 public ActionResult HtmlCheckBox(FormCollection formCollection)
        {
            return Content(Request["lfm1"]);
        }
如果選中checkbox,則得到“true,false”,如果不選中checkbox則得到“false”。如果你需要用到不選也要提交的情況可以使用

這個helper,但一般還是推薦大家直接使用


 

2、

我們先新增一個View:

 

檢視
  {%>
  
   
    
     
      
      

 

這裡要注意所有的Input的name都相同,Html.BeginForm("TestCheckBox", "Home")的意思是當此表單提交的時候會提交到

HomeController的TestCheckBox這個Action方法中。我們新增這個方法:


 

Action
 public ActionResult TestCheckBox(int[] lfm)
         {
             string t="";
             foreach (var item in lfm)
             {
                 t = t + item.ToString();
             }
             return Content(t);
         }
 

 

為了簡單,TestCheckBox方法的引數名需要與input的名字相同,於是mvc自動幫我們將你選擇的checkbox的value值匹配到引數陣列

中,當然你可以通過Request獲得,不過這樣的話需要你自己進行處理。

三、RadioButton
RadioButton的用法就比較簡單了,我們舉個簡單的例子:
View:

 

View
  { %>
   
 
 
 
 

Controller:

 

程式碼
 public ActionResult HtmlRadioButtonTest()
        {
            return View();
        }
        public ActionResult RadioResult()
        {
            return Content(Request["lfm"]);
        }
 

得到的結果就是你選中RadioButton的值。這個helper和 版本用法是基本一樣的。
四、應用

View:

 

程式碼
 

NewsList

   


       

           


           
           
           
       
  {%>
           { %>
   
       

           


           
           
           
       
   
   
   

   

                選擇
           

                Author
           

                Title
           

                CreateTime
           

               
           

               
           

               
           

               
           

 

Controller:

 

程式碼
public ActionResult NewsList()
        {
            return View(ListNews.GetList());
        }
        public ActionResult NewsListResult(int[] ID)
        {
            string result = "選中的ID";
            foreach (var item in ID)
            {
                result = result + "," + item;
            }
            return Content(result);

        }
           
 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-620998/,如需轉載,請註明出處,否則將追究法律責任。

相關文章