本节示例MVC9.rar下载:http://file.ddvip.com/2008_10/1225163054_ddvip_5588.rar
这一回为避免写第八节时那种情况再次出现,我改用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中我们有这样的功能
publicvoidsave([DataBind("account")]Accountaccount);可以实现将一个对象与表单绑定
当然Asp.netMVC中也应该有
我们将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); 来实现绑定
这个用于表单中只有一个对象的情况,前一个则可适用于多个对象在同一表彰中的情况