刚把项目升级到2012,发现发生了很多变化,以下是最近看过的网站和资料汇集,供需要者参考。

本文在最近一个月可能会不断更新。

Razor2.0

新特性介绍:
取消了@Href和@Url.Content;可以使用conditional attribute了(就是class = ""等将不会显示)
空单元(void Eliment);新的syntax tree;
 

WebPage2.0

新特性介绍:
包含详细的如何通过Google/Yahoo/Faceboock用户登录站点(OAuth和OpenID支持)
 

MVC3到MVC4升级中遇到的问题汇总

登录机制换了,和用户相关的操作会出现一些错误

现在是SimpleMembership了,也就是每个用户有1个ID,一个用户名是必备的,其他的都可以自定义(系统帮助定义了一些)。
注意MVC4会生成一个新的aspnet.db,结构于原来的不同。web.config中需要做相应的修改。
其他大致可能引发的问题包括:
1. 所有使用Membership和其他早期身份认证操作的地方都会有问题
但它不会说是Membership的问题,而是说“aspnetdb文件找不到”或“xxlog.mdf与Xx不匹配”之类的。
现在要获取所有用户,请用:
  1. var users = new UsersContext().UserProfiles.ToList();
删除则是:
  1. userContext.UserProfiles.Remove(user);
  2. userContext.SaveChanges();
这个UsersContext(在新建的MVC4项目中,它会自动出现在一个叫做AccountModels.cs的文件中;如果是升级的项目,可以新建一个MVC4项目然后拷贝过来)。据称他除了能在本地数据库中存储用户信息外,还可可以接受OpenID等外网的用户。有点像“用QQ号登陆”。
 

2. 所有[Authorize[Roles="XXX"]的地方会出错。

 
比如这个:
  1. A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)
这是因为他还在尝试到旧的aspnetdb中找Role。
这时候,请到一个~\Filters\InitializeSimpleMembershipAttribute.cs文件中,找这句话:
  1. WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);

并把它挪到(此语句只能调用一次,故需要挪动,或注释掉):

~\Global.asax.cs中尽早调用,比如:
  1. protected void Application_Start()
  2. {
  3. AreaRegistration.RegisterAllAreas();
  4.  
  5. AuthConfig.RegisterAuth();
  6. ...
  7.  
  8. WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
  9. }

另外在一个叫做 FilterConfig.cs文件中,请加上第二句话:

  1. public class FilterConfig
  2. {
  3. public static void RegisterGlobalFilters(GlobalFilterCollection filters)
  4. {
  5. filters.Add(new HandleErrorAttribute());
  6. filters.Add(new InitializeSimpleMembershipAttribute());
  7. }
  8. }

原文见:http://stackoverflow.com/questions/12342398/simplemembership-mvc4-authorizeattribute-and-roles

 
深入学习新的Authority机制:
2. 这篇文章说了如何使用Role(感觉不太好,不应该把这些安全内容放到View里边,应该放到Controller里边。但至少知道怎么弄了):http://www.asp.net/web-pages/tutorials/security/16-adding-security-and-membership 
 

Razor的一些小改动

site.css大规模改动
 
如果发现网站的文字、表格变化了,是因为缺省的site.css变了。
比如现在表格都变成没有格子线条的了。
@this.XXX不支持
 
错误:@this.InitLayout(xxx) //自己写的一个Helper,现在出错。
正确:@(this.InitLayout(xxx) )
 
Layout方案的变化
 
现在所有的页面都缺省使用~/_ViewStart.cshtml(无需调用,自动运行),其中只有一句话:
  1. @{
  2. Layout = "~/Views/Shared/_Layout.cshtml";
  3. }
_Layout自动其提供的整体布局、色调、图片,很多在site.css中(比如有两处使用了background,整个页面上边黑色边缘则是border: 10px #000形成的)。
 

如果想沿用原来自己的Layout,可以删除这句话,就会继续调用原来的Layout了。

如果是新建的MVC4项目,可通过修改_Layout.cshtml文件形成自己的Layout。
 
某些页面或页面的局部突然不显示
 
就是上面的Layout机制变化造成的。
如果没有删除上面~/_ViewStart.cshtml中

  1. Layout = "~/Views/Shared/_Layout.cshtml";

这句话,在任何其他地方设置Layout可能会导致错误,但不报错!只是从此处以后的内容不再显示。

比如如果在你自己的View再写:
  1. Layout = "~/Views/Shared/_Layout.cshtml";
就会出错。这似乎表明,Layout只能设置一次了,第二次会出错。。
所以,要么删除_ViewStart那次,要么自己不要再设置了。我选择了前者,因为我们做了一些复杂的设置工作。asp.net的本意是说可以在_ViewStart.cshtml中进行编程,确认到底用哪个Layout。

LocalDB数据库升级

SQL Server Express2008的数据库可能不支持了
 
有两种出路,一种升级到SSCE4.0(需要数据迁移,限制4G),一种升级到SSE2012(VS可以帮你自动升级,限制10G)。
升级过程如下(在VS2012里边完成的):
  1. In Server Explorer, choose the Connect to Database button.

  2. In the Add Connection dialog box, specify the following information:

    • Data Source: Microsoft SQL Server (SqlClient)

    • Server Name: (LocalDB)\v11.0

    • Attach a database file: Path, where Path is the physical path of the primary .mdf file.

    • Logical Name: Name, where Name is the name that you want to use with the file.

  3. Choose the OK button.

  4. When prompted, choose the Yes button to upgrade the file.

如果不行,请参考原文:http://msdn.microsoft.com/en-us/library/hh873188.aspx

VS2010升级VS2012必备(MVC4 WebPage2.0 Razor2.0资料汇集)的更多相关文章

  1. vs2010 打开 vs2012 的解决方案

    vs2010 打开 vs2012 的解决方案   vs2012 出来了,但是MS还是一如既往的向下兼容. 废话不多说,直接主题 要使用vs2010打开vs2012的解决方案必须得改2个东西,解决方案 ...

  2. vs2010 和vs2012的区别 副标题--Loaded事件走两次

    我上一遍博文没有通过首页显示!这边就简短的描述一下问题,希望大拿们有遇到类似问题或者知道原因的回答一下下!!! 最终的问题是Loaded事件走两次,具体可以看我上一篇对问题的描述. 在目标框架同样都是 ...

  3. 20140402 cmake编译错误原因 同时装了vs2010和vs2012

    1.cmake编译错误原因 在用cmake编译opencv出现的错误 The CXX compiler identification is MSVC 16.0.30319.1 The C compil ...

  4. Oracle_RAC数据库GI的PSU升级(11.2.0.4.0到11.2.0.4.8)

    Oracle_RAC数据库GI的PSU升级(11.2.0.4.0到11.2.0.4.8) 本次演示为升级oracle rac数据库,用GI的psu升级,从11.2.0.4.0升级到11.2.0.4.8 ...

  5. VS2010 打开 VS2012 的项目

    用 VS2010 打开 VS2012 项目,只需两步. 1. 修改解决方案文件(*.sln) 使用记事本打开 *.sln 文件,将里面的 Microsoft Visual Studio Solutio ...

  6. 示例Oracle 10.2.0.1.0升级到10.2.0.4.0一例

    1.查看当前系统版本 [oracle@std Disk1]$ sqlplus '/as sysdba' SQL*Plus: Release - Production on Thu Jan :: Cop ...

  7. Asp.net Core 1.0.1升级到Asp.net Core 1.1.0 Preview版本发布到Windows Server2008 R2 IIS中的各种坑

    Asp.net Core 1.0.1升级到Asp.net Core 1.1.0后,程序无法运行了 解决方案:在project.json中加入runtime节点 "runtimes" ...

  8. 升级_宽视野Oracle图形升级(升级后dbca建库)—10.2.0.1.0提拔10.2.0.5.0

    ***********************************************声明**********************************************  原创作 ...

  9. .net: 不能忽视的break——寻找VS2010和VS2012编译器的一个小区别

    文中的问题来自于实际开发,但是实际开发中的代码逻辑比较复杂,因此下面的代码去掉了所有逻辑,只保留能体现问题的代码,类和都只为了说明问题,并不具有实际意义.下面首先看看下面的代码和现象. 1. 问题再现 ...

随机推荐

  1. dubbox开发rest+json指南【转】

    http://dangdangdotcom.github.io/dubbox/rest.html 目录 概述 REST的优点 应用场景 快速入门 标准Java REST API:JAX-RS简介 RE ...

  2. Effective C# Chapter1-Language Elements

    <EffectiveC#>这本书讲了一些关于C#语言的使用技巧和经验. 该系列文章是备忘录和自己的一些见解.程序猿们最喜欢这类问题了,欢迎讨论~ 菜单 Item 1 使用属性取代公共成员变 ...

  3. 谓词(NSPredicate)

    OC中的谓词操作是针对于数组类型的,他就好比数据库中的查询操作,数据源就是数组,这样的好处是我们不需要编写很多代码就可以去操作数组,同时也起到过滤的作用,我们可以编写简单的谓词语句,就可以从数组中过滤 ...

  4. Spring安全资料整理列表

    Spring 被爆漏洞,允许远程执行代码http://automationqa.com/forum.php?mod=viewthread&tid=2827&fromuid=21 Spr ...

  5. mysq优化参数详解:innodb_buffer_pool_size,innodb_file_per_table

    Mysql配置参数: thread_pool:如果支持的话,使用线程池 innodb_buffer_pool_size:物理内存50%-70%最高80%独立实例,多实例:60% innodb_flus ...

  6. YII中URL地址美化

    URL地址美化:urlManager地址管理(通过程序来实现url的地址美化) 例如: 原地址:http://localhost/项目/app/index.php?r=控制器/方法 新地址:http: ...

  7. SqlServer查找表中多余的重复记录

    1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select * from people where peopleId in (select peopleId from ...

  8. eclipse和android studio导入工程的错误

    eclipse中导入工程,需要注意导入的工程是什么,android 工程和java工程是有区别的.如果导入错误了,调起来也比较麻烦.因为入口错了呀. 特别在android studio工程,从其它人的 ...

  9. 什么是SysWow64

    转自 什么是SysWow64 Wow!什么是Wow64 64位的Windows并不是简单地把所有东西都编译成64位就万事大吉的.关于64位的CPU应该做成什么样子,Intel和AMD曾有各自的打算.A ...

  10. 手动修复OneDrive的DNS污染屏蔽的方法

    随着云计算的发展和微软云战略的持续推进,使用网盘进行文档存储.协同编辑与共享已成为文档操作的新流程.而Office.Office 365和OneDrive等微软产品是Windows用户的首选.但由于国 ...