刚把项目升级到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不匹配”之类的。
现在要获取所有用户,请用:
var users = new UsersContext().UserProfiles.ToList();
删除则是:
                userContext.UserProfiles.Remove(user);
userContext.SaveChanges();
这个UsersContext(在新建的MVC4项目中,它会自动出现在一个叫做AccountModels.cs的文件中;如果是升级的项目,可以新建一个MVC4项目然后拷贝过来)。据称他除了能在本地数据库中存储用户信息外,还可可以接受OpenID等外网的用户。有点像“用QQ号登陆”。
 

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

 
比如这个:
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文件中,找这句话:
WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);

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

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

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

    public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
filters.Add(new InitializeSimpleMembershipAttribute());
}
}

原文见: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(无需调用,自动运行),其中只有一句话:
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
_Layout自动其提供的整体布局、色调、图片,很多在site.css中(比如有两处使用了background,整个页面上边黑色边缘则是border: 10px #000形成的)。
 

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

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

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

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

比如如果在你自己的View再写:
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. C++ ORM ODB 入门介绍(一)

    C++的语言特性决定了在C++中的ORM框架不可能像Java,C#那没有那么灵活. C++的ORM框架一般都是基于模板,编译时,因此其效率比起Java中的ORM框架更高. ODB是一个比较独立,成熟的 ...

  2. 查看MySQL数据库表的命令介绍

    如果需要查看MySQL数据库中都有哪些MySQL数据库表,应该如何实现呢?下面就为您介绍查看MySQL数据库表的命令,供您参考. 进入MySQL Command line client下查看当前使用的 ...

  3. Android5.0之Activity的转场动画

    Activity的转场动画很早就有,但是太过于单调,样式也不好看,于是Google在Android5.0之后,又推出的新的转场动画,效果还是非常炫的,今天我们一起来看一下. 1.旧转场动画回顾 首先我 ...

  4. Volley完全解析

    从前在学校用的最多的网络请求框架就是AsyncHttpClient,用久了发现这样一个问题,就是代码复用太难,基本上做不到,所以有一段时间又回归了HttpURLConnection和HttpClien ...

  5. iOS之苹果和百度地图的使用

    iOS中使用较多的3款地图,google地图.百度地图.苹果自带地图(高德).其中苹果自带地图在中国使用的是高德的数据.苹果在iOS 6之后放弃了使用谷歌地图,而改用自家的地图.在国内使用的较多的就是 ...

  6. Linux基础命令(三)

    一.常用命令—文件目录类命令 1.ls 列出指定或默认目录的文件信息 使用形式: ls [选项] [目录名] 实例: $ls $ls –als $ls /home/sq/Desktop $ls ./D ...

  7. commons-fileupload源码学习心得

    commons-fileupload依赖于commons-io包. commons-fileupload的使用方法: 1.创建一个文件项目工厂类DiskFileItemFactory.       D ...

  8. Fetch的使用

    import React,{ Component } from 'react'; import { AppRegistry, ListView, Image, Text, StyleSheet, Vi ...

  9. 鼠标移动到表格的TD上的时候显示成一个手型的样子怎么做?

    在除了IE6的情况下,可以通过CSS的:hover伪类来实现: 假如你想设定的固定区域为: <div id="test"></div>,那么只需要在CSS样 ...

  10. NUnit使用详解(二)

    转载:http://hi.baidu.com/grayworm/item/39aa11c5d9375d56bdef6990 五:常用断言 在NUnit中,断言是单元测试的核心.NUnit提供了一组丰富 ...