1. 程式人生 > >Asp.net Mvc Framework 九 (View與Controller互動)

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

這一回為避免寫第八節時那種情況再次出現,我改用Wps寫了,如果複製過去格式有問題講大家見諒

--鄒健

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

為了本課能更好講解我們先建立一個賬號的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); 來實現繫結

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