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 = OFFON [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,不过仍有些问题还没有解决,以后有时间的话再来个修改版吧。


  • posted @ 2008-03-14 13:14 Shawn Chi 阅读(2945) 评论(12)  编辑 收藏 网摘 所属分类: ASP.NET MVC

      回复  引用  查看    
    #1楼2008-03-14 13:18 | 重典      
    ^^不错
      回复  引用  查看    
    #2楼[楼主]2008-03-14 13:21 | Shawn Ji      
    @重典
    o(∩_∩)o

      回复  引用  查看    
    #3楼2008-03-14 16:13 | Anytao      
    路过,支持,喜欢有实践的东西
      回复  引用    
    #4楼2008-03-14 22:23 | 北京SEO网站优化[未注册用户]
    问下,文章最后的添加在线收藏的代码是哪里找到的?
    能给个不?

      回复  引用  查看    
    #5楼2008-03-15 11:09 | 隨風.NET      
    MVC 可以分层吗 把mvc分别放到不同的层中
      回复  引用  查看    
    #6楼[楼主]2008-03-17 09:18 | Shawn Ji      
    @北京SEO网站优化
    http://addthis.com" target="_new">http://addthis.com
    挺好玩的

      回复  引用  查看    
    #7楼[楼主]2008-03-17 09:20 | Shawn Ji      
    @隨風.NET
    我所说的分层不是将MVC割裂开来,而是将业务逻辑,数据模型,数据访问等东西分离出来。

      回复  引用    
    #8楼2008-04-09 22:17 | 郭荣维[未注册用户]
    楼主,辛苦了。
    我也在做这方面的事情。碰到了一些问题。希望可以和楼主一起探讨。
    比如:后台,如果想用webform模式,或开源的在线编辑器要在mvc模式下用等。
    QQ:759922422

      回复  引用  查看    
    #9楼[楼主]2008-04-11 14:55 | Shawn Ji      
    @郭荣维
    抱歉,在线编辑器,这些东西我还没研究过~

      回复  引用    
    #10楼2008-04-28 20:52 | 孙立兴[未注册用户]
    看来对这种语言有一定见解了
    了不起




    发表评论

    昵称: [登录] [注册]

    主页:

    邮箱:(仅博主可见)

    评论内容:

      登录  注册

    [使用Ctrl+Enter键快速提交评论]

    0 1105326




    相关文章:

    相关链接: