NSun.MVC 仿 Java Struts

      asp.net MVC在不断改进,NSun.MVC也只是本人的爱好和实践体验所编写。

      大多数net程序员可能都不喜欢Java的那种繁琐的配置编程,本人仿照Java MVC框架Struts编写了基于Asp.net的MVC框架NSun.MVC,也是借鉴了Java那样的配置方式。本人编写过一些Java程序,但是对于Java这种配置并不感到麻烦和繁琐而是感觉到这样的好处,配置也并不影响编程的效率反而觉得模块分离后的配置带来编程的效率。

      配置及使用方法:

1.建立一个web项目(这里做一个登录的演示)

2.首先引入NSun.MVC.dll

3.在web.config配置文件中配置

  <configSections>
 <!--配置mvc-->
    <section name="actions" type="NSun.MVC.MvcSection,NSun.MVC"/>
  </configSections>
 <httpHandlers>
        <remove verb="*" path="*.do"/>
        <add verb="*" path="*.do" type="NSun.MVC.DoHttpHandlerFactory,NSun.MVC"/>
        <remove verb="*" path="*.aspx"/>
        <add verb="*" path="*.aspx" type="NSun.MVC.MVCHttpHandlerFactory,NSun.MVC"/>
</httpHandlers>

4.建立一个action类(LoginAction),继承自NSun.Mvc.BaseAction,需要实现一个抽象的Execute的方法(提交默认执行方法)

public override ActionMapping Execute(ActionFormBean formbean, HttpRequest request, HttpResponse response)
        {            
  var f = (formbean as LoginForm);
            ViewData["name"] = f.Name;
            ViewData["pass"] = f.Pass;
            return new ActionView("main");
        }
 如果想定义其他方法需要以Execute作为方法名的后缀,比如添加方法那么方法名为AddExecute,访问路径为配置路径+"/Add"就可以了(如:Login.do/Add)
就可以访问AddExecute方法了。这里我们就用默认方法。
5.客户端提交表单可能需要一个实体来组装那么我们来做一个FormBean来组装客户端参数,添加FormBean类(LoginForm),继承自NSun.MVC.ActionFormBean,
这里需要实现一个抽象方法,是用来验证参数值的,如果不需要验证我们return null就可以了。这里为了演示功能我们验证一个密码必须大于3。
public class LoginForm : ActionFormBean
    {
        public string Name { get; set; }
        public string Pass { get; set; }

        public override ActionMapping Validate(HttpRequest request)
        {
            if (request["pass"].Length<3)
            {
                return new ActionView("error", "密码小于3位");
            }
            else
            {
                return null;
            }
        }
    }
如果参数有错误则跳转配置的错误页面ActionView第一个参数为跳转页面名称,第二个参数为错误信息。默认获取名称为(MESSAGEERROR)在页面可以通过
<%=ViewData["MESSAGEERROR"]%>来获得错误信息。也可以通过配置来修改名称。
  <appSettings>
    <!--修改错误存储key名称-->
    <add key="errorname" value="error"/>
  </appSettings>
以上则修改错误信息名称MESSAGEERROR为error获取变为<%=ViewData["error"]%>
6.Formbean和Action都建立好了,添加一个Login页面。因为没有工具的支持所以如果添加aspx页面还的删除对应的.cs文件,这里我们直接建立一个htm页面把
后缀修改为aspx即可,唯一需要修改的是在页面中添加
<%@ Page Language="C#" Inherits="NSun.MVC.MVCPage" %>这样一句声明。这样就不会有多余的cs文件了。还需要一个错误页面Error.aspx和登录后页
面Main.aspx
Login.aspx页面:
<%@ Page Language="C#" Inherits="NSun.MVC.MVCPage" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
</head>
<body>
    <form action="Login.do" method="post">
    帐号:<input id="name" name="Name" type="text" />
    密码:<input id="pass" name="Pass" type="text" />
    <input id="Submit1" type="submit" value="登录" />
    </form>
</body>
</html>
Error.aspx页面:这里配置错误信息key为error
<%@ Page Language="C#" Inherits="NSun.MVC.MVCPage" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
</head>
<body>
    错误为:<%=ViewData["error"] %>
</body>
</html>
 
Main.aspx页面:
<%@ Page Language="C#" Inherits="NSun.MVC.MVCPage" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
</head>
<body>
    帐号:<%=ViewData["name"] %><br />
    密码:<%=ViewData["pass"] %>
</body>
</html>
 
7.action="Login.do"是哪里来的?这里我们需要配置action。配置如下:
 <actions>
    <!--
      class:actionclass
      path:访问路径这里.do结尾可以在配置文件中该
      formbeanclass:这里对应一个formbean可空
      id:方便看可空
    -->
    <action class=" NSunMVCSample.Action.LoginAction,NSunMVCSample" path="/Login.do" formbeanclass="NSunMVCSample.FormBean.LoginForm,NSunMVCSample" id="login">
      <!--
       id:唯一
       path:跳转路径
       type:跳转方式Transfer,Redirect-->
      <forward path="Main.aspx" id="main" type="Transfer"></forward>
      <!--form验证后跳转错误页面-->
      <forward path="error.aspx" id="error" type="Transfer"></forward>
    </action>   
8.完成!

Demo源码下载:NSunMVCSample.rar

posted @ 2010-08-22 17:14  Dacey  Views(607)  Comments(3Edit  收藏  举报