MVC傳遞數據的方式

用MVC方式編寫程序時一般不使用服務器端控件,沒有像webform寫一個Button的事件時只需要 <asp:Button ID="bt1" runat="server" OnClick="bt1_OnClick" />,聲明button的事件就可以了。

    那麼MVC怎麼提交數據的那 ?用傳統的提交表單的方式提交數據。

1、post提交表單的方式

下面例子說明如何把用戶名和密碼提交到服務器端的

複製代碼

<% using(Html.BeginForm("index","test", FormMethod.Post)){ %>
  
<p> <%=ViewData["user"%> </p>
  
<fieldset>
  
<legend>用戶提交</legend>
  
<p>用戶名:<%=Html.TextBox("userName"%></p> 
  
<p>密 碼:<%=Html.TextBox("passWord"%></p> 
  
<p><input type="submit" value="提交" /> </p>
</fieldset>
<% } %>

複製代碼

在view代碼中BeginForm函數有幾個參數BeginForm("index", "test", FormMethod.Post),index是actionName,test是Controller名字,formMethon是個枚舉的提交方式。ViewData["user"] 把提交的數據展示出來。

複製代碼

        [AcceptVerbs( HttpVerbs.Post)]
        
public ActionResult Index(string username, string password)
        {
            
//參數方式
            ViewData["user"=   username+ password ; 
           
//webform取數據方式
           
// ViewData["user"] =  Request.Form["username"] + Request.Form["password"];
            return View();
        }

複製代碼

上面兩種接受參數的方式一樣的,只需要把參數名字和view代碼中的控件id一致就可以了。

MVC還有一種比較先進的接受數據的方式——通過UpdateModel方式得到

複製代碼

 [AcceptVerbs( HttpVerbs.Post)]
 
public ActionResult Index(User model)
 {
    ViewData["user"= model.UserName + model.PassWord;  //屬性名字和參數名一致
    return View();
 }

/////////

 [AcceptVerbs( HttpVerbs.Post)]
 
public ActionResult Index()
 {  
   User u = new User();
   UpdateModel(u, Request.QueryString.AllKeys);  
     

   ViewData["user"=u.UserName + u.PassWord;  //屬性名字和參數名一致 

   return View();
 }

 

複製代碼

上面兩種寫法結果一樣的,至於有什麼區別我還沒看明白 ^_^

 

 2、get獲取url參數

 get方式獲取值可以用傳統方式Request.QueryString得到url值,也可以使用上面提到的參數方式和UpdateModel模型方式。

複製代碼

        [AcceptVerbs(HttpVerbs.Get)]
        
public ActionResult Index(string username,string password)
        {
           
//1、參數方式
           ViewData["w"= username + password;

           
//2、model方式
           ViewData["w"= model.UserName + model.PassWord;

           
//3、webform方式  
           
// ViewData["w"] = Request.QueryString["username"] + Request.QueryString["password"]; 
 
            
return View();
        }

複製代碼

上面三種方式都能正確接到值,其實第一種和第二種方式一樣,都是參數方式,只是第二種比較靈活而已。而對於前兩種方式,如果view頁面有對應的展示控件(id一致),會把結果直接展示出來。

 

3、 TempData傳值

TempData可以在頁面直接傳值,和viewdata用法一樣,只不過他是一次性的,再次刷新會丟失 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章