這一回爲避免寫第八節時那種情況再次出現,我改用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