ASP.NET MVC Preview 2 小例子

自从ASP.NET MVC Framework出现之后,就比较感兴趣,但却一直也没时间仔细的研究,前些日子ASP.NET MVC Preview 2发布后,有空的时候也尝试着玩一下。


今天简单地完成个小东西,类似个Chatroom。 功能很简单,用昵称和电邮登录,并用此信息发送信息。






先搞个表:
USE   [ TalkDB ]
GO
SET  ANSI_NULLS  ON
GO
SET  QUOTED_IDENTIFIER  ON
GO
CREATE   TABLE   [ dbo ] . [ Chatroom ] (
    
[ CharId ]   [ int ]   NOT   NULL ,
    
[ NickName ]   [ nvarchar ] ( 30 ) COLLATE SQL_Latin1_General_CP1_CI_AS  NOT   NULL ,
    
[ EMail ]   [ nvarchar ] ( 50 ) COLLATE SQL_Latin1_General_CP1_CI_AS  NOT   NULL ,
    
[ Posttime ]   [ datetime ]   NULL ,
    
[ Contents ]   [ nvarchar ] ( 500 ) COLLATE SQL_Latin1_General_CP1_CI_AS  NULL ,
 
CONSTRAINT   [ PK_CHATROOM ]   PRIMARY   KEY   CLUSTERED  
(
    
[ CharId ]   ASC
)
WITH  (PAD_INDEX   =   OFF , IGNORE_DUP_KEY  =   OFF ON   [ PRIMARY ]
ON   [ PRIMARY ]

研习过MVC的大概都看过 scottgu大牛关于ASP.NET MVC Framework的一套介绍:
  • ASP.NET MVC 框架 简介
  • ASP.NET MVC 教程 (第一部分)
  • ASP.NET MVC 教程 (第二部分: URL路径选择)
  • ASP.NET MVC 教程 (第三部分: 把ViewData从控制器传到视图)
  • ASP.NET MVC 教程 (第四部分: 处理表单编辑和提交场景)

    不再赘述了,其实我也说不明白 :)~ 相比上一个版本,觉得比较Cool的地方是对模板标签的强化,或者说是Easy化。比如

    再如

    这样可以避免一些硬代码。其中Index(),About(),和CheckIn()都是Controller中的方法,尤其是对Form的使用,真是简便极了,Controller获取页面数据可以
                UserItem UserItem  =   new  UserItem();

                
    //  获取数据
                BindingHelperExtensions.UpdateFrom(UserItem, Request.Form);

    但这些都需要一个简单的引用Controller: 

    <% @ Import Namespace="Shawn.Chatroom.Controllers"  %>

    对于Controller中Action之间的多参数传值,有几种方法:比如在HomeController控制下的登录页面Check In成功之后,需要转向ChatroomController控制的Chatroom页面,并需要告知ChatroomController两个参数UserItem.NickName 和 UserItem.EMail 

             public   void  CheckIn()
            
    {
                UserItem UserItem 
    = new UserItem();

                
    // TODO.

                
    if (UserItem.IsSuccessful)
                
    {
                    
    // 转向Chatroom页面,传递UserItem.NickName 和 UserItem.EMail
                    RedirectToAction(new RouteValueDictionary(new 
                }

            }

    在进行RedirectToAction语句之前如何为传值作准备
    1.
    Register Routes
    在Global中配置

                routes.Add( new  Route( " {controller}/{action}/{nickName}/{email} " new  MvcRouteHandler())
                
    {
                    Defaults 
    = new RouteValueDictionary(
                    
    new { controller = "Charroom", action = "ChatroomIndex", nickName = "", email = "" }),
                }
    );
    HomeController
             public   void  CheckIn()
            
    {
                UserItem UserItem 
    = new UserItem();

                
    // TODO.

                
    if (UserItem.IsSuccessful)
                
    {
                    RedirectToAction(
    new RouteValueDictionary(new 
                    

                        controller 
    = "Chatroom", action = "ChatroomIndex", nickName = UserItem.NickName, email = UserItem.EMail.Replace(".","_dot_"
                    }
    ));
                }

            }

    ChatroomController
             public   void  ChatroomIndex( string  nickName,  string  email)
            
    {
                ChatList chatList 
    = new ChatList();

                chatList.UserNickName 
    = nickName;
                chatList.UserEmail 
    = email.Replace("_dot_"".");
            }

    2.使用TempData
    HomeController
             public   void  CheckIn()
            
    {
                UserItem UserItem 
    = new UserItem();

                
    // TODO.

                
    if (UserItem.IsSuccessful)
                
    {
                    
    // TempData方式
                    TempData["UserItem"= UserItem;
                    RedirectToAction(
    new RouteValueDictionary(new { controller = "Chatroom", action = "ChatroomIndex" }));
                }

            }

     ChatroomController 

             public   void  ChatroomIndex()
            
    {
                ChatList chatList 
    = new ChatList();


                
    // TempData方式
                UserItem userItem = (UserItem)TempData["UserItem"];
                chatList.UserNickName 
    = userItem.NickName;
                chatList.UserEmail 
    = userItem.EMail;
            }

    (见到TempData会使我想起WebForm上使用ViewState存储些东西,虽然二者并不相同。)

    对于Controller中Action之间的多参数传值,开始一直比较苦恼,但今天找到了解决的办法,还是靠了园子中乱世重典的帮忙,再此感谢。

    代码下载
    Download Shawn Chatroom

    当然,这只是个简单得不能再简单的东西,很多没有完善的地方,比如界面美观,比如分页,比如实时更新Chat列表,比如方法的优化,比如分层等等都没有实现,另外这次使用的是LINQ to SQL,其实我是打算使用ADO.NET Entity Framework,不过仍有些问题还没有解决,以后有时间的话再来个修改版吧。


  • 你可能感兴趣的:(asp.net)