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


本节示例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); 来实现绑定

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

本文作者:
« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3