***** 该内容需会员回复才可浏览 *****
今天简单地完成个小东西,类似个Chatroom。 功能很简单,用昵称和电邮登录,并用此信息发送信息。


先搞个表:
USE[TalkDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATETABLE
[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,不过仍有些问题还没有解决,以后有时间的话再来个修改版吧。

添加至收藏夹