Mvc项目实例 MvcMusicStore

2023-11-03

原文链接:http://www.cnblogs.com/wenming205/archive/2010/08/08/1795341.html

文章不错,看完之后搭建项目就没什么问题了,其他很多就是经验问题了

做过webform的,其实也就需要知道怎么把页面和C#代码关联起来,看看这个不错

 

一、简介

此项目为.Net Mvc学习试例,原版的项目可从www.asp.net网站上下载;

在学习的过程中,我们将通过.net mvc2来创建一个音乐仓储系统。整个应用程序包括三个部分,分别为:选购、结帐和后台管理

二、预备知识

在学习此项目时,最好具用Linq知识。在这里推荐博客园里LoveCherry的一步一步学Linq to sql

http://www.cnblogs.com/lovecherry/archive/2007/08/13/853754.html

 

三、项目开始

第一节    搭建基本开发准备

项目开发环境

开发工具:vs2010旗舰版

使用迅雷可从此连接下载;

thunder://QUFlZDJrOi8vfGZpbGV8Y25fdmlzdWFsX3N0dWRpb18yMDEwX3VsdGltYXRlX3g4Nl9kdmRfNTMyMzQ3Lmlzb3wyN

jg1OTgyNzIwfDRhZTYyMjg5MzNkZGU0OWQ5YmZhNGMzNDY3YzgzMWMyfC9aWg==

数据库:sqlserver2000或更高,此项目中我采用的是sqlserver2005

 

第二节    新建MVC项目

 

打开vs2010 选中文件à新建à项目

将打一个新建项目对话框,

1.  选择.net framework4平台

2.  选择web模板中 Asp.net MVC2空web应用程序

3.  修改项目名称为MvcMusicStore ,然后点击确定

 

项目中默认新建了一些文件夹,它们的作用如下:

文件夹名称

作用

/Controllers

存储控制器文件,处理页面传入的请求,和返回数据库处理文件

/Views

界面或页面模板

/Models

数据库业务实体类及数据类

/Content

存储图片,样式表,或其它静态文件

/Scripts

存放自定义javascript文件

/App_Data

存放数据库文件

 

控制器(Controller)

添加一个HomeController

鼠标右击Controller文件夹,à添加à控制器   打开添加控制器对话框,把控制器名称修改为HomeController à点击添加.

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.Mvc;

 

namespace MvcMusicStore.Controllers

{

    public class HomeController : Controller

    {

        //

        // GET: /Home/

 

        public ActionResult Index()

        {

            return View();

        }

 

    }

}

 

为了更新简单的认识控制器,我们修改HomeController 让其返回一个字符串

1.       把Index函数返回的ActoinResult改为string

2.       修改return语句

修改后代码为:

 

        // GET: /Home/

        public string Index()

        {

            return "Hello from Home";

        }

运行项目查看效果

注明:请不要录入上面的地址去浏览;在vs中自带的服务器会随机分配端口。

 

下面我们将为项目仓储控制器它有三个模块它们分别为

1.       仓储首页模块

2.       列表模块

3.       指定相册的详细模块

 

添加控制器和方法

代码如下:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.Mvc;

 

namespace MvcMusicStore.Controllers

{

    public class StoreController : Controller

    {

        //

        // GET: /Store/

 

        public string Index()

        {

            return "Hello from Store.Index()";

        }

 

        //

        // GET: /Store/Browse

 

        public string Browse()

        {

            return "Hello from Store.Browse()";

        }

 

        //

        // GET: /Store/Details

 

        public string Details()

        {

            return "Hello from Store.Details()";

        }

    }

}

 

再次运行项目,浏览/Store/Detials

从上面页面中我们看到,仅仅传地址而不传参数是无法浏览特定相册信息的。下面我们修改控制器的Details方法

        // GET: /Store/Details/5

 

        public string Details(int id)

        {

            string message = "Store.Details,ID=" + id;

            return Server.HtmlEncode(message);

        }

运行效果如下

在传输入参数时,为什么不是/store/detals/?id=6呢? 这里我们看一下Global.asax文件

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.Mvc;

using System.Web.Routing;

 

namespace MvcMusicStore

{

    public class MvcApplication : System.Web.HttpApplication

    {

        public static void RegisterRoutes(RouteCollection routes)

        {

            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

 

            routes.MapRoute(

                "Default"// 路由名称

                "{controller}/{action}/{id}"// 带有iD?数的URL

                new { controller = "Home", action = "Index", id = UrlParameter.Optional } //参数默认值

            );

 

        }

 

        protected void Application_Start()

        {

            AreaRegistration.RegisterAllAreas();

 

            RegisterRoutes(RouteTable.Routes);

        }

    }

}

 

其中这段

routes.MapRoute(

                "Default"// 路由名称

                "{controller}/{action}/{id}"// 带有iD?数的URL

                new { controller = "Home", action = "Index", id = UrlParameter.Optional } //参数默认值

            );

说明地址栏中第二个/后面的值就是参数id的默认值,所以当我浏览store/details/6时,就说明参数id的值为6

 

那么,我们要传其它值时,怎么办呢?还好.net mvc框架中早已经考虑到,我们不必再去写相应的路由。 我们接着修改controller中的代码。

        //

        // GET: /Store/Browse

 

        public string Browse()

        {

            string message = "Store.Browse, Genre=" +

                Server.HtmlEncode(Request.QueryString["genre"]);

            return Server.HtmlEncode(message);

        }

运行效果如下:

说明:在程序中我们应用到Server.HtmlEncode 方法来处理Request.Querystring[“genre”] 是为了防止javascript注入和修改浏览地址

 

视图和视图模块

这里我们要引入一个概念视图模块;

在mvc项目中重点体现的是Model ,View 和Controller三个部分。这三个部分中View部分负责显示,一般是一些显示模板;

Controller控制器,类似于一个中间转化器,处理浏览器发过来的请求,传向指定的方法,调用Model 来和数据库交互信息;

Model模块层,处理数据库信息。

在这个过程中出现一个问题就是View 和Model数据通过谁传递,怎么传递?

在.net mvc中增加了两个数据类型,ViewData 和TempData

虽然ViewData和TempData都可以传递弱类型数据,但是两者的使用是有区别的:

ViewData的生命周期和View相同, 只对当前View有效.

TempData保存在Session中, Controller每次执行请求的时候会从Session中获取TempData并删除

Session, 获取完TempData数据后虽然保存在内部的字典对象中,但是TempData集合的每个条目访问一次后就从字典表中删除. 

也就是说TempData的数据至多只能经过一次Controller传递.

为何TempData只能够在Controll中传递一次? 因为SessionStateTempDataProvider.LoadTempData方法(在TempDataDictionary.Load中调用)在从ControllerContext的Session中读取了TempData数据后, 会清空Session:

 

使用模板

使用mvc模板为程序公共元素设置信息

找到Views文件夹,选中Shared文件夹,右健单击à添加à新建项—>选中Mvc2视图母板

把文件名称设置为Site.master à添加

 

添加成功后,向母板页中添加样式表 然后添加一些html标记。代码如下:

<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %>

 

<!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 runat="server">

    <link href="/Content/Site.css" rel="stylesheet" type="text/css" />

    <title><asp:ContentPlaceHolder ID="TitleContent" runat="server" /></title>

</head>

<body>

    <div>

        <div id="header">

            <h1>ASP.NET MVC Music Store</h1>

            <ul id="navlist">

                <li class="first"><a href="/" id="current">Home</a></li>

                <li> <a href="/Store/">Store</a></li>

            </ul>

        </div>

        <asp:ContentPlaceHolder ID="MainContent" runat="server">

      

        </asp:ContentPlaceHolder>

    </div>

</body>

</html>

 

添加一个视图模板

 

首先,我们要修改HomeController

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.Mvc;

 

namespace MvcMusicStore.Controllers

{

    public class HomeController : Controller

    {

        //

        // GET: /Home/

 

        public  ActionResult Index()

        {

            return View();

        }

 

    }

}

 

选中函数Index() ,然后右键单击Index  选择添加视图

 

 

修改添加Index视图代码如下:

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

    <h2>This is the Homepage</h2>

</asp:Content>

 

 

再次运行项目

 

使用ViewModel向View传输入信息

 

为项目创建一个新的文件夹,将其命名为ViewModels

在信息传输入时分为两类一是简单信息另一个是复杂信息两类;通过绑定视力的强类型数据对应的类,来传递信息

1.       简单信息传输

选中ViewModels文件夹,右键à添加类 StoreIndexViewModel

代码如下:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

 

namespace MvcMusicStore.ViewModels

{

    public class StoreIndexViewModel

    {

        public int NumberOfGenres { getset; }

        public List<string> Genres { getset; }

    }

}

 

 

信息传输类改完之后,我们要修改Controller文件,使用Controller把数据传输入到视图中;

 

找到StoreController 修改其index方法如下

        // GET: /Store/

 

        public ActionResult Index()

        {

           var genres=new List<string>{"Rock","Jazz","Country","Pop","Disco"};

 

           var viewModel=new  StoreIndexViewModel{

            NumberOfGenres=genres.Count,

            Genres=genres

           };

           return View(viewModel);

        }

重新编译整个项目

 

选中Index添加对应视图,选中“创建强类型视图“ 在“视图数据类”里选中创建的ViewModels.StoreIndexViewModel类 à添加

 

修改视图代码如下:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master"

 Inherits="System.Web.Mvc.ViewPage<MvcMusicStore.ViewModels.StoreIndexViewModel>" %>

 

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">

         Index

</asp:Content>

 

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

 

    <h2>Browse Genres</h2>

 

    <p> select from <%:Model.NumberOfGenres %> Genres:</p>

 

    <ul>

        <%foreach (string genreName in Model.Genres)

          { %>

          <li>

            <%:genreName %>

          </li>

        <%} %>

    </ul>

</asp:Content>

 

2.       复杂信息传输

  首先我们在Models文件夹里添加两个类。一是Albums.cs 另一个是Genre.cs

代码分别如下:

Genre.cs

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

 

namespace MvcMusicStore.Models

{

    public class Genre

    {

        public string Name { getset; }

    }

}

 

Album.cs

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

 

namespace MvcMusicStore.Models

{

    public class Album

    {

        public string Title { getset; }

        public Genre Genre { getset; }

    }

}

 

向ViewModels文件里添加新类StoreBrowseViewModel,做为复杂信息传输的介质

引用类库

using MvcMusicStore.Models;

 

修改StoreBrowseViewModel类

    public class StoreBrowseViewModel

    {

        public Genre Genre { getset; }

        public List<Album> Albums { getset; }

    }

修改StoreController类

        // GET: /Store/Browse

 

        public ActionResult Browse()

        {

 

            string genreName =

                Server.HtmlEncode(Request.QueryString["genre"]);

 

            var genre = new Genre

            {

                Name = genreName

            };

 

            var albums = new List<Album>();

 

            albums.Add(new Album { Title = genreName + "Album1" });

            albums.Add(new Album { Title = genreName + "Album2" });

 

            var viewModel = new StoreBrowseViewModel

            {

                Genre = genre,

                Albums = albums

            };

 

            return View(viewModel);

        }

 

然后选中Browse方法,右键单击添加视图 à创建强类型视图à 选择类为MvcMusicStore.ViewModels.StoreBrowseViewModelà添加

 

修改视图代码如下:

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

    <h2>Browsing Genre: <%:Model.Genre.Name %></h2>

    <ul>

    <%foreach (var album in Model.Albums)

      { %>

      <li><%:album.Title %></li>

    <%} %>

    </ul>

</asp:Content>

 

 

接着,我们再修改控制器StoreController里的Details方法

        //

        // GET: /Store/Details/5

 

        public ActionResult Details(int id)

        {

            var album = new Album

            {

                Title = "Sample Album"

            };

            return View(album);

        }

而后,选种Details方法,右键添加视图,选择强类型为Models.Album ,最后修改details视图的代码如下:

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

    <h2>Album <%:Model.Title%></h2>

</asp:Content>

至此我们把StoreController里的Index ,Browse和Details模块全部实现了。 可还有一个问题,就是页面间如何连接。

 下面我们接着修改代码,为页面间信息添加链接

 

找到Views文件夹里的Browse文件里的Index修改代码如下:

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

    <h2>Browse Genres</h2>

    <p> select from <%:Model.NumberOfGenres %> Genres:</p>

    <ul>

        <%foreach (string genreName in Model.Genres)

          { %>

          <li>

          <%:Html.ActionLink(genreName,"Browse","Store",new {genre=genreName},null) %>

          </li>

        <%} %>

    </ul>

</asp:Content>

说明:如果想通过ActionLink传输更多参数。

  <%:Html.ActionLink(genreName,"Browse","Store",new {genre=genreName,gen="aa"},null) %>

运行结果为:/Store/Browse?genre=Jazz&gen=aa

重新运行整个项目,查看效果.

转载于:https://www.cnblogs.com/bdstjk/archive/2012/05/18/2519850.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mvc项目实例 MvcMusicStore 的相关文章

  • 编译时运算符

    有人可以列出 C 中可用的所有编译时运算符吗 C 中有两个运算符 无论操作数如何 它们的结果始终可以在编译时确定 它们是sizeof 1 and 2 当然 其他运算符的许多特殊用途可以在编译时解决 例如标准中列出的那些整数常量表达式 1 与
  • C 编程 - 文件 - fwrite

    我有一个关于编程和文件的问题 while current NULL if current gt Id Doctor 0 current current gt next id doc current gt Id Doctor if curre
  • 没有强命名的代码签名是否会让您的应用程序容易被滥用?

    尝试了解authenticode代码签名和强命名 我是否正确地认为 如果我对引用一些 dll 非强命名 的 exe 进行代码签名 恶意用户就可以替换我的 DLL 并以看似由我签名但正在运行的方式分发应用程序他们的代码 假设这是真的 那么您似
  • 以文化中立的方式将字符串拆分为单词

    我提出了下面的方法 旨在将可变长度的文本拆分为单词数组 以进行进一步的全文索引处理 删除停止词 然后进行词干分析 结果似乎不错 但我想听听关于这种实现对于不同语言的文本的可靠性的意见 您会建议使用正则表达式来代替吗 请注意 我选择不使用 S
  • Web 客户端和 Expect100Continue

    使用 WebClient C NET 时设置 Expect100Continue 的最佳方法是什么 我有下面的代码 我仍然在标题中看到 100 continue 愚蠢的 apache 仍然抱怨 505 错误 string url http
  • 为什么当实例化新的游戏对象时,它没有向它们添加标签? [复制]

    这个问题在这里已经有答案了 using System Collections using System Collections Generic using UnityEngine public class Test MonoBehaviou
  • BitTorrent 追踪器宣布问题

    我花了一点业余时间编写 BitTorrent 客户端 主要是出于好奇 但部分是出于提高我的 C 技能的愿望 我一直在使用理论维基 http wiki theory org BitTorrentSpecification作为我的向导 我已经建
  • OleDbDataAdapter 未填充所有行

    嘿 我正在使用 DataAdapter 读取 Excel 文件并用该数据填充数据表 这是我的查询和连接字符串 private string Query SELECT FROM Sheet1 private string ConnectStr
  • 不同枚举类型的范围和可转换性

    在什么条件下可以从一种枚举类型转换为另一种枚举类型 让我们考虑以下代码 include
  • 将 VSIX 功能添加到 C# 类库

    我有一个现有的单文件生成器 位于 C 类库中 如何将 VSIX 项目级功能添加到此项目 最终目标是编译我的类库项目并获得 VSIX 我实际上是在回答我自己的问题 这与Visual Studio 2017 中的单文件生成器更改 https s
  • C#中如何移动PictureBox?

    我已经使用此代码来移动图片框pictureBox MouseMove event pictureBox Location new System Drawing Point e Location 但是当我尝试执行时 图片框闪烁并且无法识别确切
  • 重载<<的返回值

    include
  • 显示UnityWebRequest的进度

    我正在尝试使用下载 assetbundle统一网络请求 https docs unity3d com ScriptReference Networking UnityWebRequest GetAssetBundle html并显示进度 根
  • while 循环中的 scanf

    在这段代码中 scanf只工作一次 我究竟做错了什么 include
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 什么时候虚拟继承是一个好的设计? [复制]

    这个问题在这里已经有答案了 EDIT3 请务必在回答之前清楚地了解我要问的内容 有 EDIT2 和很多评论 有 或曾经 有很多答案清楚地表明了对问题的误解 我知道这也是我的错 对此感到抱歉 嗨 我查看了有关虚拟继承的问题 class B p
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 为什么编译时浮点计算可能不会得到与运行时计算相同的结果?

    In the speaker mentioned Compile time floating point calculations might not have the same results as runtime calculation
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现
  • 如何防止用户控件表单在 C# 中处理键盘输入(箭头键)

    我的用户控件包含其他可以选择的控件 我想实现使用箭头键导航子控件的方法 问题是家长控制拦截箭头键并使用它来滚动其视图什么是我想避免的事情 我想自己解决控制内容的导航问题 我如何控制由箭头键引起的标准行为 提前致谢 MTH 这通常是通过重写

随机推荐

  • js筛选并返回数组中的相同值

    可以使用 JavaScript 中的 filter 函数来筛选数组中的相同值 例如 要从数组 1 2 3 4 5 1 2 3 中筛选出所有的重复值 可以这样写 const numbers 1 2 3 4 5 1 2 3 const dupl
  • 中微区块链集团参加第二届中国高科技产业化高峰会议

    中微区块链集团参加第二届中国高科技产业化高峰会议 11月25日上午 素有科技界 达沃斯论坛 之称的第二届 中国高科技产业化高峰会议 在广州高新区开幕举行 本届大会的主题是 科技赋能 智汇湾区 产业生态 多名院士专家出席大会 就科技产业化热点
  • Windows使用技巧

    摘自 这些技巧让你windows用起来很爽 小工具 小技巧 删小广告 重装卸载残留 作者 丶PURSUING 发布时间 2021 03 12 16 09 17 网址 https blog csdn net weixin 44742824 a
  • Kubernetes(k8s)的基础概念

    目录 Kubernetes概述 什么是Kubernetes 为什么需要K8S K8S的特性 Kubernetes 集群架构与组件 K8S工作流程 Kubernetes的核心组件 Master组件 Kube apiserver Kube co
  • Spring Cloud学习笔记【分布式配置中心-Config】

    文章目录 SpringCloud Config概述 概述 传统方式弊端 主要功能 与GitHub整合配置 Config服务端配置与测试 服务端配置 即Gitee上的配置文件 Config Demo配置 Spring Cloud Config
  • Idea 全局替换指定字符

    最近使用idea开发 刚接触不久 然后碰到需要全局替换的时候 懵逼了 之前使用eclipse 直接Ctrl F 就可以操作了 现在使用idea 摁Ctrl F竟然只能搜 不能替换 尴尬的一匹 解决办法有两种 1 摁Ctrl F 搜索 再摁C
  • 【iOS】如何优雅快速的大量导入与展示系统照片与视频

    最近接了一个需求 要求增加一个相册导入图片 视频 的功能 具体要求有 1 导入速度要非常快 1000张图片需要控制在一分钟 需要复制到本地 2 可以无限制导入 导入数量需要支持10000 3 需要拿到图片的基本信息 包括位置 尺寸 大小 格
  • 高并发高可用之ElasticSearch

    目录 ES对比MySql数据库 Docker下安装ES和kibana 增删改查操作 高级检索Query DSL 映射 安装中文IK分词器 SpringBoot整合ES 实战应用 ES集群 ES里面的数据怎么保持与mysql实时同步 都存内存
  • 报错: ‘XXXX‘ is declared but its value is never read.Vetur(6133)

    引入的路径本没有问题 结果确报错 解决方法如下 1 在VScode工具的设置中找到设置 2 在搜索栏输入 vetur 并找到Vertur gt Validation Script 在比较靠下多滑动页面哦 3 最后关闭项目重新打开即可 报错消
  • 二叉树前序,中序以及后序的非递归算法实现(外加层序)

    二叉树前序 中序以及后序的非递归算法实现 外加层序 最近在学数据结构里面的二叉树 就把三个遍历的非递归算法以及层序遍历写了一下hhh 感觉就是用栈模拟了一下递归算法 其实三种遍历的方法大体相似 主要就是在访问节点值的时候对代码进行了部分改动
  • 代码质量度量标准_Google研发度量改进实践

    Google改进过程 本文案例源自 Measuring Engineering Productivity 作者 Ciera Jaspen Google 前言 随着敏捷开发 DevOps等方法论在软件行业持续运用 各种用来提升组织研发效率和产
  • Jmeter性能测试3——JMETER-脚本优化

    断言 作用 用于检查检测在测试中得到的响应结果是否符合预期 用以保证性能测试过程中数据交互与预期一致 主要是用来调试 真正执行压力测试时候 断言禁用 目的 在request 请求 返回层面加一层判断机制 实现的过程 在请求下添加断言 请求不
  • 如何解决python安装模块是出现的 error: Unable to find vcvarsall.bat

    看了一圈网上的 觉得知乎里面的答案是最好的 我觉得大部分问题在于python版本和vs版本不配对的问题 例如 python2 7会默认配对msvs2008 python3 4 和3 5是默认配对msvs2010 所以我电脑上python3
  • 【软件测试常见Bug清单】

    软件测试中 bug的类型有很多种 比如 代码错误 界面优化 设计缺陷 需求补充和用户体验等 一般情况下 需求补充和设计缺陷比较好区分 但是代码错误 界面优化和用户体验区分不是很明显 下面我们就来说说这三者 顺带整理一些常见的这些类型的bug
  • 【操作系统】王道考研 p22-26 生产者消费者问题、多生产者多消费者问题、吸烟者问题、读者写者问题、哲学家进餐问题

    生产者消费者问题 多生产者多消费者问题 吸烟者问题 读者写者问题 哲学家进餐问题 生产者消费者问题 有同步和互斥 同步 缓冲区没满才能放产品 缓冲区不空才能取产品 互斥 各进程互斥访问 关于PV P是消耗 V是释放 或理解为P是进 V是出
  • PCB相关知识总结-(1)PCB工艺

    开关电源PCB相关知识总结 PCB工艺 1 前言 2 基础概念 2 1 基本介绍 2 1 1 PCB的基板 2 1 2 相关术语 2 2 分类 2 3 正片和负片 2 4 过孔工艺 2 5 PCB阻焊颜色 2 6 PCB验收标准 1 前言
  • 纳秒是10^(-9),代码写法是1.0e-9不是10.0e-9

    纳秒是10 9 代码写法是1 0e 9不是10 0e 9 参考System nanoTime 简书
  • API 自动化测试难点总结与分享

    API自动化测试的难点包括 接口的参数组合较多 需要覆盖各种可能的情况 接口的状态和数据关联较多 需要验证返回结果是否符合预期 接口的并发访问和性能测试较为复杂 需要合理规划和调度测试策略 接口的安全性和权限控制较为重要 需要针对不同的用户
  • qt中的frame设置边框和颜色,里面控件不变

    需要指定样式对象 比如我的QFrame的名称是frame 2output 那么在设置样式的时候 其代码就如下 frame 2output border radius 10px border 1px solid rgb 100 100 189
  • Mvc项目实例 MvcMusicStore

    原文链接 http www cnblogs com wenming205 archive 2010 08 08 1795341 html 文章不错 看完之后搭建项目就没什么问题了 其他很多就是经验问题了 做过webform的 其实也就需要知