不使用Visual Studio开发ASP.NET MVC应用(下篇)
书接上回!
前文“纯手工”、彻底抛弃Visual Studio,制作了一个ASP.NET MVC应用,运行起来还不错,项目目录、源代码、web.config等所有东西都已经做到“最简”,除去了Visual Studio生成的一大堆无关东西,当然这只是一个“起点”,随着后面项目内容和功能的扩展还需要一步步添加很多东西,但如此干净一个项目,看着就让人舒服,一砖一瓦的盖自己的房子,何尝不是一种享受!(其实很多人不认同这样,在stackoverflow原文中,问题解答者用"severe brain damage "(脑子坏了)来形容这种做法)
前文只是用C#源码编译工具csc.exe编译出了一个ASP.NET MVC应用,本篇将在增加一些非常基本的功能,Entity Framework和Master Page,这两个都是开发常规Web应用,最最基础的东西,一个用来访问数据库,一个用来构建页面框架,有了页面框架,可以使每个Controller所展现的View只关注自己要实现的内容。
一、增加Master Page
第一步,在目录/View下建立文件_ViewStart.cshtml,这个文件会在用户每次访问View时先调用,代码如下:
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
第二步,建立文件夹Shared,并在里面创建文件_Layout.cshtml,内容如下:
<!DOCTYPE html>
<html>
<meta charset="utf-8" />
<head>
<title></title>
</head>
<body>
<div id="header">
<h1>ASP.NET MVC</h1>
</div> <div id="main">
@RenderBody()
</div> <div id="footer">
<p>© @DateTime.Now.Year - 我的ASP.NET项目</p>
</div>
</body>
</html>
第三步,修改/View目录下Index.cshtml文件,去掉其他所有东西,只用下面一行:
<h1>Home Page</h1>
第四步,使用前文命令,重新编译项目,生成MyApplication.dll并发布,按照前文提到的需要发布的文件,即:
bin\MyApplication.dll
Views\*
Global.asax
web.config
第五步,打开浏览器,查看运行结果,可以看到一样的展现页面,但View中已经去掉了HTML页面框架,只剩需要展示的内容。
二、增加Entity Framework
第一步,Entity Framework需要用到一下几个dll,你可以通过使用Nuget下载,也可以直接点这里下载:
EntityFramework.dll
MySql.Data.dll
MySql.Data.Entity.EF6.dll
笔者连接的数据库是MySql,如果你连接Sql Server,需要的dll就是EntityFramework.SqlServer.dll。将上面三个dll拷贝到bin目录
第二步,在根目录下创建Models目录,在里面建立MyDbContext.cs文件,内容如下:
using System.Data.Entity; namespace MyApplication
{
[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
public class MyDbContext : DbContext
{
public MyDbContext() : base("name=MyDbContext")
{
}
public DbSet<User> Users { get; set; }
} }
MyDbContext是你web.config中连接字符串的名字,User是一会要建立的实体类,也就是数据库里的表名字,一定要和数据库里的一模一样,包括大小写都不能错。
第三步,建立实体类User,代码如下:
using System; namespace MyApplication
{
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public bool Age { get; set; }
}
}
上面User要和数据库中表明一样,Id,Name和Age也要和你数据库字段一样
第四步,修改HomeController.cs文件,内容如下(红色的是需要增加的部分):
using System.Web.Mvc;
using System.Data;
using System.Data.Entity;
using System.Linq;
namespace MyApplication
{
public class HomeController : Controller
{
private MyDbContext db = new MyDbContext(); public ActionResult Index()
{
User user = db.Users.SingleOrDefault(u => u.Id == 1);
ViewBag.UserName = user.Name; return View();
}
}
}
第五步,在/Views/Home/Index.cshtml文件中任意地方,增加”@ViewBag.UserName“
第六步,修改web.config文件(浅青色是需要增加的部分):
<?xml version="1.0"?>
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
</configSections> <appSettings>
<add key="webpages:Enabled" value="false"/>
</appSettings> <system.web>
<!--TODO: remove in production enviroment-->
<compilation debug="true" targetFramework="4.5">
<assemblies>
<add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</assemblies>
</compilation>
<!--TODO: remove in production enviroment-->
<customErrors mode="Off"/>
</system.web> <entityFramework>
<providers>
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
</providers>
</entityFramework> <system.data>
<DbProviderFactories>
<remove invariant="MySql.Data.MySqlClient"/>
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"/>
</DbProviderFactories>
</system.data> <connectionStrings>
<add name="MyDbContext" providerName="MySql.Data.MySqlClient" connectionString="Server=localhost;Uid=root;Pwd=123456;Database=test;Character Set=utf8;"/>
</connectionStrings>
</configuration>
第七步,使用下列命令重新编译项目:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /t:library /out:bin\MyApplication.dll /r:"bin\System.Web.Mvc.dll" /r:"bin\EntityFramework.dll" /r:"bin\MySql.Data.dll" /r:"bin\MySql.Data.Entity.EF6.dll" Controllers\HomeController.cs Global.asax.cs App_Start\RouteConfig.cs Models\MyDbContext.cs Models\User.cs
第八步,发布代码,即可看到效果了。
好了,就写到这吧。很基础、无聊的东西,完全是为了”玩“,以后的内容你们自己扩展吧。
不使用Visual Studio开发ASP.NET MVC应用(下篇)的更多相关文章
- 不使用Visual Studio开发ASP.NET MVC应用(上篇)
入行十多年,工作闲暇,还是对信息技术比较关注,经常测试一些新的技术,感受一下科技发展给大家带来的便利.Visual Studio接触也有年头了,对它总感觉乎近乎远的,既熟悉又陌生,一直没有像用别的工具 ...
- Working with Data » 使用Visual Studio开发ASP.NET Core MVC and Entity Framework Core初学者教程
原文地址:https://docs.asp.net/en/latest/data/ef-mvc/intro.html The Contoso University sample web applica ...
- Visual Studio 2017 ASP.NET Core开发
Visual Studio 2017 ASP.NET Core开发,Visual Studio 2017 已经内置ASP.NET Core 开发工具. 在选择.NET Core 功能安装以后就可以进行 ...
- ASP.NET Core 中文文档 第二章 指南(2)用 Visual Studio 和 ASP.NET Core MVC 创建首个 Web API
原文:Building Your First Web API with ASP.NET Core MVC and Visual Studio 作者:Mike Wasson 和 Rick Anderso ...
- ASP.NET安全[开发ASP.NET MVC应用程序时值得注意的安全问题](转)
概述 安全在web领域是一个永远都不会过时的话题,今天我们就来看一看一些在开发ASP.NET MVC应用程序时一些值得我们注意的安全问题.本篇主要包括以下几个内容 : 认证 授权 XSS跨站脚本攻击 ...
- 带你使用Visual Studio 2019创建一个MVC Web应用
工欲善其事必先利其器,我们既然有Visual Studio2019这样的IDE为什么不用?学.Net Core而不用Visual Studio进行开发可谓是多么另类呀!既然你已经安装了VS2019的话 ...
- Visual Studio开发首选!DevExtreme v19.1.6全新来袭
DevExtreme Complete Subscription是性能最优的 HTML5,CSS 和 JavaScript 移动.Web开发框架,可以直接在Visual Studio集成开发环境,构建 ...
- 【转载】保哥 釐清 CLR、.NET、C#、Visual Studio、ASP.NET 各版本之間的關係
我常常不仅仅逛 博客园,还会去找国外,特别是台湾的技术部落格,发现好的文章,我便会收录,今天我转载或者全文复制,在Google 博客园,一位叫保哥, 釐清 CLR..NET.C#.Visual Stu ...
- 用于 Visual Studio 和 ASP.NET 的 Web 应用程序项目部署常见问题
https://msdn.microsoft.com/zh-cn/library/ee942158(v=vs.110).aspx#can_i_exclude_specific_files_or_fol ...
随机推荐
- 使用 requests 模块
官网:http://docs.python-requests.org/en/master/ 请求方式 requests.get() requests.post() requests.put() req ...
- lockable JS function,解锁操作之前,不能重复操作
(function () { var ed = []; window.Lockable = function (lockF, options) { if (!arguments.length) { v ...
- 102. Binary Tree Level Order Traversal二叉树层序遍历
网址:https://leetcode.com/problems/binary-tree-level-order-traversal/ 参考:https://www.cnblogs.com/grand ...
- 下面程序的输出结果是____ A:11,10 B:11,11 C:10,10 D:10,11 int x=10; int y=x++; printf("%d,%d",(x++,y),y++);
下面程序的输出结果是____ A:11,10 B:11,11 C:10,10 D:10,11 int x=10; int y=x++; printf("%d,%d",(x++,y) ...
- python - 初识面向对象
1.初识面向对象 面向过程:一切以事务的发展流程为中心 优点:负责的问题流程化,编写相对简单 缺点:可扩展性差,只能解决一个问题,改造也会很困难,牵一发 ...
- 微信小程序wx.previewImage实用案例(交流QQ群:604788754)
本案例是可以滑动预览多张图片效果.(本案例在本地配置好之后,请扫描二维码到手机滑动预览.在开发者工具上预览,滑动不是很流畅) 图片必须选择远程图片,本地图片无法实现预览. 或是通过wx.chooseI ...
- 静态方法和实例方法(mark)
借花献佛[转自 ivony's blog] 关于静态方法和实例方法的一些误区. 一. 静态方法常驻内存,实例方法不是,所以静态方法效率高但占内存. 事实上,方法都是一样的,在加载时机和占 ...
- C# 应用程序单例(禁止多开) 获取.net版本号 以及 管理员权限
Mutex不仅提供跨线程的服务,还提供跨进程的服务.当在构造函数中为Mutex指定名称时,则会创建一个命名了的Mutex.其他线程创建Mutex时,如果指定的名称相同,则返回同一个互斥体,不论该线程位 ...
- Java并发编程阅读笔记-同步容器、工具类整理
- json、demjson
一.json 概述: json.dumps():将 Python 对象编码成 JSON 字符串, dic -> json str json.dump() :将 Python 对象保存成 JSO ...