Asp.net Mvc Framework 九 (View與Controller交互)

 

這一回爲避免寫第八節時那種情況再次出現,我改用Wps寫了,如果複製過去格式有問題講大家見諒 <?XML:NAMESPACE PREFIX = O />

--鄒健

本節所有示例都是講解登錄提交表單的過程

爲了本課能更好講解我們先建立一個賬號的Model

namespace  MvcApplication4.Models

{

  public   class   Account

  {

    string  _username;

    public   string  Username {

      get  {  return  _username; }

      set  { _username =  value ; }

    }

    string  _password;

    public   string  Password {

      get  {  return  _password; }

      set  { _password =  value ; }

    }

  }

}

一. 使用我們Asp時代的老朋友

我們建立一個HomeController,之後在其中加一個Index的Action

    public   void  Index() {

      RenderView( "Index" );

    }

是用於顯示Index這個View的(Index.aspx):

這是提交表單的

     < form   method ="post"   action =" <% = Url.Action("save")  %> ">

     <% = Html.TextBox( "username" %>

     <% = Html.TextBox( "password" %>

     <% = Html.SubmitButton( "登錄" %>

     </ form >

大家可以看到在這個View中form的Action爲save

於是我們還需要一個叫save的Action用於接收表單:

    public   void  save (){

      ViewData[ "username" ] = Request.Form[ "username" ];

      ViewData[ "password" ] = Request.Form[ "password" ];

      RenderView( "Result" );

    }

最後我們將結果顯示在Result.aspx這個View中:

這是用於接收結果的

    <% = ViewData [ "username" %>

    <% = ViewData [ "password" %>

大家都看到了,我們在Save中使用了我們的老朋友Request.Form來接收了表單

二. 其實Asp.netMVC爲我們提供了更好的方法

是什麼方法呢?

那就是我覺得不錯的一方法 ReadFromRequest 它可以接收Form和QueryString

看以下save這個Action的代碼

    public   void  save (){

      ViewData[ "username" ] =  this .ReadFromRequest( "username" );

      ViewData[ "password" ] =  this .ReadFromRequest( "password" );

        RenderView( "Result" );

    }

可以實現上面一樣的功能

三. 我們可以用"參數"

前面我們提到了參數來接收的功能

    public   void  save ( string  username, string  password){

      ViewData[ "username" ] = username;

      ViewData[ "password" ] = password;

        RenderView( "Result" );

    }

一切OK

四. 到激動人心的地方了我們使用綁定功能

在Monorail中我們有這樣的功能

public void save([DataBind("account")] Account account) ;可以實現將一個對象與表單綁定

當然Asp.net MVC中也應該有

我們將View改成:

 這是提交表單的

     < form   method ="post"   action =" <% = Url.Action("save")  %> ">

     <% = Html.TextBox( " Account .username" %>

     <% = Html.TextBox( " Account .password" ) %>

     <% = Html.SubmitButton( "登錄" %>

     </ form >

而Save這個Action中寫如下代碼:

    public   void  save() {

      Account  user =  new   Account ();

      BindingHelperExtensions .UpdateFrom(user, Request.Form,  " Account " );

      ViewData[ "username" ] = user.Username;

      ViewData[ "password" ] = user.Password;

      RenderView( "Result" );

    }

呵呵,仍然可以輸

BindingHelperExtensions .UpdateFrom 讓我們將從表單中以對象方式傳遞着數據

當然這個對象如果綁定的爲Dlinq的對象就更加方便應用了

也可以通過這種方式綁定

View:

 這是提交表單的

     < form   method ="post"   action =" <% = Url.Action("save")  %> ">

     <% = Html.TextBox( "username" ) %>

     <% = Html.TextBox( "password" ) %>

     <% = Html.SubmitButton( "登錄" %>

     </ form >

Action:

public   void  save() {

      Account  user =  new   Account ();

      BindingHelperExtensions .UpdateFrom(user, Request.Form);

      ViewData[ "username" ] = user.Username;

      ViewData[ "password" ] = user.Password;

      RenderView( "Result" );

    }

也可以實現

這裏用了 BindingHelperExtensions .UpdateFrom(user, Request.Form); 來實現綁定

這個用於表單中只有一個對象的情況,前一個則可適用於多個對象在同一表彰中的情況


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