MVC 学习日志1(上)

2012.7.5 开始学习MVC,本以为这个框架多难学,学下来的感受是其实也就是编写格式而已,和普通的webform有质的区别。顿时理解那句老话,世上无难事,只怕有心人。只要开始和坚持,那么结果一定不会差。好了,言归正传,下面开始记录学习MVC的一些学习要点,也许没那么系统,没书上那么循序渐进,具体以实例和不同要点记录下来,只为自己回头可以看看。如果有时间的话,一定回头改之,希望自己也能向那些大牛一样可以做一个系列。

1. MVC 介绍

MVC (Model,View,Controller),模型,视图,控制器。

模型主要负责处理数据;控制器负责接受web请求,控制器中的Action 负责返回某个View,View是显示的内容。

例: localhost:xxx/user/index          此处访问的是项目下  UserController下的index  Action

而不像普通Webform框架下有具体的Aspx页面,localhost:xxx/user/index/a.aspx。 这个Url在webform下可以正常访问,在MVC框架下是不行的。

另外:MVC框架设计原则是拒绝 runat=”server” 此类框架的,所以最好不要在MVC框架的项目中不要使用这种控件。

2.  MVC 框架学习

有很多MVC框架,譬如大家常说的:Struts2,Spring,Hibgrade.

本系列使用的是 微软自己的MVC框架------ Asp.net MVC 2.0.至于其他比较好的框架,大家可以直接学习,但是个人认为还是从 微软的MVC框架开始。 这就像 Javascrpt 和 Jquery ,extjs 框架一样,肯定学好了Javascript再去学Jquery,extjs 这样,肯定易如反掌。毕竟都是Javascript的封装而已,就像你自己写的特殊函数封装而已。

VS2008 简体中文版,打了sp1补丁后,装上MVC2.0 模版之后开始

模版下载链接:

1)新建MVC项目

如上图,项目目录组成:

Code 存放自定义的类(比如 User类,Filter类(后面介绍到));

Context存放CSS。

Model 数据模型 updatemodel等

Controllers  存放控制器,控制器name必须由名字+Controller 组成,而且名字要和Views中要有以这个名字命名的文件夹。如图有个UserContrller,则Views 同样有个 User文件夹。

Views存放视图 。  Views根目录下有几个文件夹,则项目应该就有几个Controller,而且名字要和Views子文件夹名字相同。  另:此目录下的Shared 存放公共模版。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
 
namespace MvcApplication1.Controllers
{
    [HandleError]
    [MvcApplication1.Code.ParamFilter]
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
 
 
 
 
 
            ViewData["Message"] = "Welcome to ASP.NET MVC!";
            ViewData["TEST"] = "Viewdata_test";
 
 
            MvcApplication1.Code.mycode code = new MvcApplication1.Code.mycode();
            code.Name = "王先生";
            code.Id = "001";
            ViewData["user"] = code;
 
 
            List<string> ViewDataList = new List<string>();
            ViewDataList.Add("a");
            ViewDataList.Add("b");
            ViewDataList.Add("c");
 
 
            ViewData["ViewDataList"] = ViewDataList;
 
            //TempData["ddd"] = "ddd:为TempData,只能用1次";
            //Response.Redirect("about");
            return View();       //默认Home/index view
        }
 
        public ActionResult About()
        {
            return View();
        }
    }
}
 

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Home Page
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>html helper   <%=Html.ActionLink("超级链接到about","about") %></h2>
<h2>url helper  <%=Url %></h2>
    <h2><%= Html.Encode(ViewData["Message"]) %></h2>
    <h2><%=ViewData["TEST"]%></h2>
    <h2><%foreach (string str in ViewData["ViewDataList"] as List<string>){%></h2>
    <li>
    <%=str%>
    </li>
    <%} %>
    
 
    <h2><% =(ViewData["user"] as MvcApplication1.Code.mycode).Name %></h2>
    <p>
        To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>.
    </p>
</asp:Content>

以上就是大概情况。

小总结:   localhost:3373/home/index

访问的是Controller文件夹下的HomeContrller控制器中的index action。显示的东西由view决定,具体显示哪个view由action决定(return view(“xx”))。

3.  关键要点

1) ViewData 传值      Contrller中的Action定义 ViewData[“name”]=”Mike”

View 使用  <%=ViewData[“name”]%>

例:   Controller定义ViewData变量:

List<string> ViewDataList = new List<string>();
           ViewDataList.Add("a");
           ViewDataList.Add("b");
           ViewDataList.Add("c");

ViewData["ViewDataList"] = ViewDataList;

View中使用ViewData变量:

<%   foreach(string str in  ViewData[“ViewDataList”] as List<string>){   %>

<li><%= str%></li>

<% }   %>

2.  TempData传值    类似 ViewData。

但是这个值只保存一次。Index action 定义了

TempData[“onlytime”]=”只能访问一次”;  return view(“edit”)

则在 跳转到edit view 会显示tempdata值,刷新后就没了。

3.ViewData  其他传值方式  例如  类,只要在View端做好 类型转换就可,然后直接访问属性或者字段。

另:VS 自动生成属性快捷: prop+tab+tab

4. 重定向  (4种写法)

假如在UserContrller 中的 Index action 中重定向。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
    public class UserController : Controller
    {
        //
        // GET: /User/

public ActionResult Index()
        {

return  view();  //默认访问views文件夹下User文件夹下的index视图

return  view(“xx”);

Response.Redirect(“xx”);

return  Redirect(“xx”);

return  RedirectAction(“eidt”,”home”);
}

}

}

注意:

return  view(“xx”);

Response.Redirect(“xx”);

return  Redirect(“xx”);

前3种方式,只能访问当前Controller 名字的View 视图。

return  RedirectAction(“eidt”,”home”);  --只有这个可以指定到别的 View

5. URLROUNTING 路径选择

Global.asax  定义。

默认的Url路径:  localhost:3373/home/index     这个就是在 Global.asax 定义的。

如果Url这样才能访问:localhost:3373/home.Controller/index  就得修改Global

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
 
namespace MvcApplication1
{
    // Note: For instructions on enabling IIS6 or IIS7 classic mode, 
    // visit http://go.microsoft.com/?LinkId=9394801
    public class MvcApplication : System.Web.HttpApplication
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
 
            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );
 
        }
 
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
 
            RegisterRoutes(RouteTable.Routes);
        }
    }
}

修改并并运行:

routes.MapRoute(
            "Default", // Route name
            "{controller}.controller/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );

则下图的Url无法访问

必须改成  user.controller才能访问。

6.  Filer

决定是Action之前用,还是之后;  决定return view 之前,还是之后做。

定义Filer  ,继承  System.Web.Mvc.ActionFilterAttribute ,然后重写4个方法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
 
namespace MvcApplication1.Code
{
    public class ParamFilter:System.Web.Mvc.ActionFilterAttribute
    {
        public override void OnActionExecuted(System.Web.Mvc.ActionExecutedContext filterContext)
        {
            base.OnActionExecuted(filterContext);
        }
 
        public override void OnActionExecuting(System.Web.Mvc.ActionExecutingContext filterContext)
        {
            base.OnActionExecuting(filterContext);
        }
 
        public override void OnResultExecuted(System.Web.Mvc.ResultExecutedContext filterContext)
        {
            base.OnResultExecuted(filterContext);
        }
 
        public override void OnResultExecuting(System.Web.Mvc.ResultExecutingContext filterContext)
        {
 
            //if (string.IsNullOrEmpty(filterContext.HttpContext.Request.QueryString["k"]))
            //{
            //    throw new Exception("发生了一个错误");
            //}
        }
    }
}
 

Controller 使用 Filer

在Controller 外加上  [MvcApplication1.Code.ParamFilter]

或在具体的Action 上加  [MvcApplication1.Code.ParamFilter]

posted on 2012-07-05 07:57 水墨.MR.H 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/StudyLife/archive/2012/07/05/2577157.html

MVC 学习日志1(上)相关推荐

  1. java mvc学习_史上最全的SpringMVC学习笔记

    一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于SpringMVC的配置 springmvc o ...

  2. Spring MVC学习(8)—HandlerInterceptor处理器拦截器机制全解

    基于最新Spring 5.x,详细介绍了Spring MVC的HandlerInterceptor处理器拦截器机制,以及它的一系列拦截方法. 本次我们来学习Sring MVC的HandlerInter ...

  3. Spring MVC 学习总结(五)——校验与文件上传 转自 张果 博客;已经编程校验;正确无误;...

    Spring MVC 学习总结(五)--校验与文件上传 目录 一.Spring MVC验证器Validator 1.1.定义验证器 1.2.执行校验 1.3.在UI中添加错误标签 1.4.测试运行 二 ...

  4. Spring MVC 学习笔记一 HelloWorld

    Spring MVC 学习笔记一 HelloWorld Spring MVC 的使用可以按照以下步骤进行(使用Eclipse): 加入JAR包 在web.xml中配置DispatcherServlet ...

  5. abp学习日志九(总结)

    文章目录 ABP 本系列学习日志 AutoMaper 坑1 坑2(这个不算坑) Application 坑1 坑2 ABP 学习abp的最好的网站(官网) 本系列学习日志 abp学习日记 初记 abp ...

  6. Spring MVC 学习总结(二)——控制器定义与@RequestMapping详解

    Spring MVC 学习总结(二)--控制器定义与@RequestMapping详解 目录 一.控制器定义 1.1.实现接口Controller定义控制器 1.2.使用注解@Controller定义 ...

  7. .NetCore微服务Surging新手傻瓜式 入门教程 学习日志---结构简介(二)

    .NetCore微服务Surging新手傻瓜式 入门教程 学习日志---结构简介(二) 原文:.NetCore微服务Surging新手傻瓜式 入门教程 学习日志---结构简介(二) 先上项目解决方案图 ...

  8. 我的游戏学习日志46——游戏交互设计(2)

    我的游戏学习日志46--游戏交互设计(2) 2.游戏界面设计 游戏界面在保持一致性.可读性.效率性等普适原则的基础上,还应该特殊关照玩家的沉浸体验. 首要原则是保证游戏的顺畅使用. (1)提高自然性和 ...

  9. Spring MVC 学习总结(九)——Spring MVC实现RESTful与JSON(Spring MVC为前端提供服务)...

    Spring MVC 学习总结(九)--Spring MVC实现RESTful与JSON(Spring MVC为前端提供服务) 目录 一.JSON 1.1.概要 1.2.使用ModelAndView ...

最新文章

  1. python中导入包出现unresolved reference问题
  2. Abiword 编辑事件设计
  3. 关于 IPv6 大规模部署,给我们带来了什么~
  4. HTML DOM方法
  5. 迈向数据科学的第一步:在Python中支持向量回归
  6. 【转】完整java开发中JDBC连接数据库代码和步骤
  7. java多线程 游戏_java利用多线程和Socket实现猜拳游戏
  8. python爬虫什么书好_python爬虫入门06 | 爬取当当网 Top 500 本五星好评书籍
  9. 机器学习基石笔记9——机器可以怎样学习(1)
  10. IntelliJ IDEA 代码格式化,快捷键
  11. setTimeout的隐藏小知识
  12. 计算机文化基础0008 17秋在线作业1,【在线】《计算机文化基础0008》17秋在线作业2.doc...
  13. exceptions - Pitfall: the Lost Exception
  14. Cannot subclass final class org.springframework.boot.autoconfigure.AutoConfigurationPackages
  15. html字体大小vw,如何使用CSS vw尺寸单位实现响应式字体
  16. C语言程序设计--图书信息管理系统
  17. 2023需要重点关注的四大AI方向
  18. JAVA 基本语法 Scanner类的使用 实现步骤 三步走(Scanner)
  19. JQUREY DOM 操作详解
  20. python接口自动化项目_Python+requests接口自动化完整项目框架整理笔记

热门文章

  1. sepFilter2D函数
  2. pandas明明数据有,但是通过该标签进行筛选的时候就得到空或者是错误的结果
  3. 空间平滑滤波器(上)
  4. 第十六讲 傅里叶级数拓展
  5. Codeforces Round #554 (Div. 2) 1152A - Neko Finds Grapes
  6. Arcgis10.3在添加XY数据时出现问题
  7. odata连接现有数据库
  8. 工作三年,我没给家里一分钱,还把家里掏空了
  9. mysql 主从单库单表同步 binlog-do-db replicate-do-db
  10. 剑指Offer_29_最小的K个数