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); 来实现绑定

这个用于表单中只有一个对象的情况,前一个则可适用于多个对象在同一表彰中的情况


本节示例MVC9.rar

Asp.net Mvc Framework 系列
posted @ 2008-03-14 13:00  重典  阅读(8741)  评论(34编辑  收藏  举报