.net 一些基础操作

36小时免费服务:jQuery基础培训

原文发表地址:36 Hour Free Offer: jQuery Fundamentals Training
原文发表时间:February 23, 2011 10:19 AM

Pluralsight(一个优秀的.NET培训公司)提供了在未来36小时内免费观看其jQuery 基础课程 的机会。

这门课程是由最为优秀的Dan Wahlin讲解的,包括5小时精彩的端到端的完整的内容。Pluralsight将提供免费参加这次 jQuery 基础课程的机会,一直持续到周四晚上(太平洋标准时间晚上 9点)。

Pluralsight还有与此类似的大约100个其他优秀的培训课程。他们最近发布了一个新订阅计划 : 每月交付29美元,您就可以观看他们所有的在线课程。他们还提供了10天免费试用的选择,您可以用下试试。在这儿您可以了解更多信息。
免费jQuery 1.5 Visual手册
谈到jQuery话题,如果您正在试用jQuery的话,我想给出一个非常有用的资源供您下载——一个针对jQuery 1.5 APIs的免费jQuery PDF “手册” 。

您可以在这儿免费下载。

希望对您有所帮助,
Scott
附:我现在也在使用Twitter来快速更新并分享链接,请关注我:twitter.com/scottgu

.net 一些基础操作_第1张图片

Posted in 未分类  |  Leave a comment

Visual Studio中的搜索和导航技巧

原文发表地址:Search and Navigation Tips/Tricks with Visual Studio
原文发表时间:August 24, 2010 12:24 AM

这是我写的关于VS2010和.NET 4发布的博文系列中的第27篇。

今天的博文将延续上周调试技巧的内容,并涵盖一些在Visual Studio中非常有用的搜索和导航技巧。这些小技巧是我的朋友Scott Cate(在这里发布了很多关于VS的使用)最近推荐给我的,许多Visual Studio开发人员,即使那些资深开发人员,似乎也不了解这些技巧。

如果你们还没有用到他们的话,希望这篇博文可以有所帮助。它们都很容易学会并且可以为你省下不少时间。

Ctrl + i – 渐进式搜索
大多使用Visual Studio的开发人员都很熟悉”查找对话框”——可以通过在IDE中按”Ctrl + F”打开。但是惊奇的是,很多开发者都不熟悉Visual Studio中的”渐进式搜索”功能——它可以让你在不打开对话框的情况下搜索当前文档。

使 用 渐 进 式 搜 索
在编辑器中使用快捷键”Ctrl + i”便可以使用渐进式搜索功能。这将轻微改变你的光标并且会使IDE左下方的状态栏变成”渐进式搜索:(搜索关键字)” – 然后你就可以输入想要查找的关键字,编辑器就会在当前文档中为你进行搜索(不需要打开对话框)。

下面我们用”action”关键字来进行渐进式搜索,然后VS会高亮第一处在文件中出现的”action”。

我们可以再一次按下”Ctrl + i”去搜索下一处出现该关键字的地方(可以不断重复该操作):

按下”Ctrl + Shift + i”会使搜索反向,并且可以跳过回格符。

你可以在任何时候按下”ESC”键来结束渐进式搜索状态。更多的关于渐进式搜索,请查看here
F3 和 Shift+F3 – 用之前的查询关键字查找
还有一个关于渐进式搜索的不错的技巧是在你按下ESC结束搜索后,会将你的查询关键字添加入IDE的搜索堆栈中。你使用的查询关键字会在VS的标准工具栏中的”查找”下拉列表中显示出来:

你可以通过在Visual Studio中按下F3键来重复最后一次的搜索。当你搜索完之后,对代码进行了一些修改,然后你想在当前文档中继续搜索时这个功能是非常有用的。只要按下F3,就可以在当前文档光标处重复上一次的搜索,而不需要重新输入查询关键字。

按下”Shift+F3”将会用最近一次查询关键字执行反向搜索(从编辑器的当前光标所在处)。你可以很方便的使用F3/Shift+F3来切换你的检索方向。
Ctrl + F3 – 用当前选择项来进行搜索
还有一个不错的小技巧就是你可以通过在编辑器中简单地高亮一个单词(或者部分单词)来避免输入查询关键字,然后按下”Ctrl + F3” 来搜索高亮部分在当前文档的下一处使用:

按下”Ctrl + F3”将会搜索下一处你所高亮的字符,而不用输入他们:

象之前一样你也可以选择使用”Ctrl + Shift + F3”来执行反向搜索。
Ctrl + Shift + F – 在解决方案中搜索
有时候你希望在整个解决方案中搜索。

“Ctrl + F”将会打开查找对话框,并且默认会在当前文档中进行查找。”Shift + Ctrl + F”会打开查找对话框并且默认在整个解决方案中搜索:


这样搜索完之后会在IDE中打开”搜索结果”窗口可以让你导航到每个找到的关键字实例去:

你可以在”搜索结果”中双击击每个搜索结果,并且导向到查询关键字所在处。

很多人不知道的一个小窍门是按”F8”或者”Shift + F8”可以导航到下一个/前一个列表中出现的搜索关键字。这可以使你在列表中不用鼠标,并且切换的更快、更容易。

Shift + F12 – 查找使用
大多数使用Visual Studio的开发者都知道如何高亮一个类型然后按F12来”转到定义”。这会打开类/类型的定义,是导航到声明的地方的一个有效方式。

很多开发者并不知道”Shift + F12”, 它可以打开所有使用特定类型的地方。这可以使你快速的知道这个特定类型是如何使用的。只要简单地选中或者将光标移到这个类型并按下”Shift + F12”就可以使用了:

这将打开”搜索符号结果”窗口并且列出在当前解决方案中所有使用特定类型的地方:

象之前所说,你可以使用”F8”和”Shift + F8” 来向前/向后导航到列表中的每个搜索结果。

Ctrl + – 和 Shift + Ctrl + – 向前/向后导航

你是否有导航到另外一个代码文件,查看一些东西然后切换回原文件?比如:你使用F12”转到定义”然后切换回使用它的代码段。

一个很多人不知道的VS的功能是”反向导航”键——“Ctrl +(减号键)”。这可以导向到导航堆栈的前一个文档/位置。

让我们来实践下,试着在Visual Studio中选择一个类型。下面我选中了”IController”接口:

按下F12来导向到他的类型定义。这个操作打开一个含所选类型的源文件的新编辑窗口:

现在要跳回我们原来的地方,按”Ctrl + (减号键)”然后VS就会带我们回到原来所在的地方:

如果你想在导航堆栈中向前移动(此时会把我们导回到ICtronller.cs文件),然后按下”Shift + Ctrl + (减号键)”。

Sara Ford有一篇讲述这个功能的很好的博文,说明了什么时候会有一个新的位置被放入导航堆栈。
Ctrl + Alt + (向下箭头) – 导航到一个打开的文件
如果在IDE中有很多打开的文件,那如何在这些文件中轻松地切换呢?

一个很有用的快捷键是”Ctrl + Alt + (向下箭头)” – 这会在VS中打开一个下拉框,其中列出了所有打开的窗口:

你可以使用箭头来选择你想要导航到的文件-或者干脆输入文件名,Visual Studio会在列表中高亮此文件。比如,上面我输入了”Mo”然后Visual Studio高亮了”ModelBinder.cs”。按下”enter”键会为我导航到那个文件:


这样提供了一个漂亮,简单的方式让你在多个文件中导航而不必使用鼠标,从而可以让你的双手不用离开键盘。记住”Ctrl + (减号)”可以用来定位回你来的地方。
导航,查看调用层次结构(Call Hierarchy)和高亮引用功能
Visual Studio 2010引入了一系列新的代码导航和搜索功能-包括新的”导航”对话框,”查看调用层次结构”功能和高亮引功能。

我之前这里有一篇博客是关于VS 2010的这三个新功能的. 如果你们还没有阅读那篇文章,尝试下那些功能,我极力推荐-他们是非常棒的补充。
编辑器的其他改进
VS2010中还有很多针对编辑器的改进-很多我之前已经发表过相关的博文。这里是我之前发表的一些关于VS2010编辑器方面的博文的链接:

• 改进的C#/VB代码智能感知支持
• 改进的JavaScript代码智能感知支持
• 选择框和多行编辑支持
• ASP.NET,HTML和JavaScipt代码段支持

另外还有一些我在VS 2010 and .NET 4 改进系列中写的其他博文。
总结
以上多数功能其实在Visual Studio之前多个发布版中已经存在了-但是很多开发者并不知道他们。希望这篇博客可以帮助不知道这些功能的人们一个便利的方法来开始了解他们。如果你想要记住这些快捷键的话-把这个VS 2010热键帖子打印出来并且放在你的显示器边上。

想要学习更多更酷的Visual Studio技巧,请订阅Scott Cate 的Visual Studio 技巧博文系列(已经有83个很赞的技巧)。也可以订阅 Sara Ford的博客 –她前几年也有一些很好的技巧。

希望这篇文章有所帮助。

Scott

附: 除写博客之外,我现在还用Twitter来快速更新和分享链接。请关注我: twitter.com/scottgu

.net 一些基础操作_第2张图片

Posted in 未分类  |  Leave a comment

VS2010中的调试技巧

原文发表地址:Debugging Tips with Visual Studio 2010
原文发表时间:Wednesday, August 18, 2010 9:48 PM

这是我的博客中关于VS 2010和.NET 4发布系列的第二十六篇文章。

今天的博文将介绍Visual Studio中的一些实用调试技巧。这是受我朋友Scott Cate (他发表过几十篇很棒的VS技术文章) 启发。他最近告诉我,许多Visual Studio下的程序员,甚至一些很有经验的开发人员,都不知道这些技巧。希望这篇文章能帮你掌握这些技巧。它们都很简单,却能帮你节约大量的时间。

跳到当前光标处(Ctrl+F10)

我经常看到人们为了到达目标代码位置,而在程序中早早设定了断点,然后反复地按F10/F11,一步步走到目标代码处。当程序员的确需要仔细观察每一步的状态变化时, F10/F11是合理的选择。然而多数情况下,人们只想快速到达他们真正关心的代码处,这时候F10/F11就不是最佳选择了。

这时,你应该利用“跳到当前光标处”这个功能。先把光标定位在要测的目标代码行上,再同时按Ctrl和F10,被测程序将直接跳到该行停下。你再也不用按许多次F10/F11了。即使目标代码位于独立的类或方法中,你仍然可以从当前正在检查的地方跳过去。

条件中断

另一种常见的情况是:开发人员设置断点,运行程序,利用不同的输入触发断点,然后在断点处手工检查是否满足某些特定的条件,从而决定是否继续调查。如果当前场景不是他们想要的,按F5继续运行程序,尝试别的输入,手动重复刚才的过程。

针对上述情况,Visual Studio提供了一个方便得多的功能——“条件中断”。只有当程序满足了开发人员预设的条件后,条件断点才会被触发,调试器中断。这将避免频繁地手工检查/恢复程序运行,大量减少调试过程中的手工和烦琐工作。

如何设置条件断点

设置条件断点非常容易。在特定的行上,按F9设置断点。

然后右击断点–编辑窗口左侧的红点,在上下文菜单上选择“Condition…”。


这时弹出一个对话框供你设置激活该断点所需的条件。比如:我们希望只有当局部变量paginatedDinners的尺寸小于10时,调试才中断。我们可以写出如下的表达式:


现在我再运行这个程序,实现搜索,只有返回值小于10时,程序运行才会被中断。对于大于10的值,该断点将被跳过。

记录到达断点次数

有时你希望,只有当第N次满足条件的运行到达断点时,才中断程序运行。例如:当第五次返回少于10份晚餐的查询结果时,中断程序运行。
可以通过右击断点,然后在弹出菜单上选择“Hit count…”菜单命令实现。

这时系统弹出一个对话框,它允许你指定:(1)当满足条件,而且进入断点的累计次数等于N时,断点命中一次。(2)当满足条件,而且进入断点的累计次数是N的倍数时,断点命中一次。(3)当满足条件,而且进入断点的累计次数大于N时,每次命中断点。

机器/线程/进程过滤

设置如下:右击断点;在弹出菜单上选择“Filter…”菜单命令;然后指定命中断点的特定条件:在指定的机器上、或指定的进程中、或指定的线程中。

跟踪点—进入断点时的自定义操作

许多人不知道“跟踪点(TrackPoints)”这个调试功能。“跟踪点“是种特殊的断点,当它被命中时,它会触发一系列自定义操作。如果你想观察程序的行为,而又不想中断调试的时候,这个功能尤其有用。

我将用一个简单的控制台程序来演示如何使用“跟踪点”。如下是斐波那契数列的一个递归实现:

以上程序中,我们使用Console.WriteLine() 输出针对特定输入值生成的最终斐波那契数列。如果希望在调试器里观察操作中每一次递归运算后的数列而又不实际中断程序运行,该怎么办呢?“跟踪点”可以轻松实现。

设置跟踪点

你可以在特定的行上,按F9加跟踪点。然后
右击断点,在上下文菜单中选择“When Hit…”:

在弹出对话框上,你可以设置命中该断点时,所触发的事件。

在上面例子中,我们设定一旦命中断点时就打印追踪信息。注意,我们已经把局部变量“x”的值,作为追踪信息的一部分输出。局部变量可以通过{变量名}语法输出。你还可以利用系统内置的命令($CALLER, $CALLSTACK, $FUNCTION等等),在追踪信息中输出常用的调试值。

在上例中,我们同时选中了底端的“continue execution“选项,这说明我们不希望程序中断调试状态,而是继续运行。唯一的不同是:每次断点条件满足时,我们的自定义追踪信息都将被输出。

现在当我们运行程序时,会发现自定义追踪信息自动显示在Visual Studio的“输出“窗口里。这让我们很容易看到程序的递归调用过程:

你也可以选择往应用程序中添加一个自定义追踪信息的监听器。这时追踪点的输出信息将通过它输出,而不是Visual Studio的“输出“窗口。

跟踪点—运行自定义的宏

上周,我在伦敦演讲时,有听众问道:当命中跟踪点时,能否自动输出所有的局部变量?

Visual Studio中并没有这样的内置功能,但我们可以写一个自定义宏来实现,然后在命中跟踪点时调用该宏。这个的实现需要先打开Visual Studio的宏编辑器(工具->宏->宏IDE菜单命令),然后在项目资源管理器的MyMacros节点下选择一个模块或创建新模块(如:加个名为“UsefulThings”的模块),再把下面的VB宏代码贴到模块中并保存。
Sub DumpLocals()
Dim outputWindow As EnvDTE.OutputWindow
outputWindow = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput).Object

Dim currentStackFrame As EnvDTE.StackFrame
currentStackFrame = DTE.Debugger.CurrentStackFrame

outputWindow.ActivePane.OutputString(“*Dumping Local Variables*” + vbCrLf)
For Each exp As EnvDTE.Expression In currentStackFrame.Locals
outputWindow.ActivePane.OutputString(exp.Name + ” = ” + exp.Value.ToString() + vbCrLf)
Next
End Sub
上述宏代码将循环当前的堆栈,把所有的局部变量输出到“输出”窗口。

使用自定义的“DumpLocals”宏

然后,我们可以在如下的一个简单程序中使用刚定制的“DumpLocals”宏了:

上述代码中,我们用F9在“Add”方法的返回值处加了个断点,然后右击断点,在弹出菜单上选择“When hit”。

将显示如下对话框。和之前不一样, 我们不选“Print a message”选项,也不手工设定需要输出的变量;而是选择“Run a marco”复选框,并指定到我们上面创建的UsefulThings.DumpLocals宏上:

为了使程序能在命中跟踪点后仍继续运行,我们将继续选中“continue execution”复选框。

运行程序

现在按F5运行程序,当“Add”方法被调用时,我们会在Visual Studio的“输出”窗口中看到如下结果。注意命中跟踪点时,宏会自动列出每个局部变量的名称和值:

总结

Visual Studio的调试程序功能极其丰富,我强烈建议大家花些时间去掌握它的所有功能。上述技巧是大家平时很少注意的那些功能中的一小部分。

我之前写过关于VS 2010 调试器改进的博文(包括固定数据提示窗、导入/导出断点、保留上次变量的值,等等)。以后我还会发表更多关于VS 2010的新智能提示和文件调试信息的转储支持的博文。这些技术赋予开发人员强大的调试能力,使调试程序(包括发行后的产品)变得更容易,更强大。

如果想学习更多Visual Studio知识,请参考Scott Cate的Visual Studio 2010知识与技巧系列。他发表了一系列精彩的免费视频和文章。

也可以参考 Jim Griesmer的Visual Studio调试技巧系列。他有着丰富的知识可供大家学习。

希望对大家有帮助。

Scott

补充:在本文之外,我还使用Twitter做快速更新和共享,地址是twitter.com/scottgu

.net 一些基础操作_第3张图片

Posted in 未分类  |  Leave a comment

ASP.NET MVC 3 (RC 2) 发布

[原文发表地址] Announcing ASP.NET MVC 3 (Release Candidate 2)

[原文发表时间] December 10, 2010 11:47 PM

今天早上ASP.NET组推出了ASP.Net MVC 3最终的发布候选版本(RC2), 你可以从这里下载安装。

快了。。

今天的 RC2发布版接近ASP.NET MVC 3最终的发布版本。它是一个真正的“发行候选版本”。我们希望我们不会再改动它的任何代码。我们今天发布它,大家就可以对它进行最后的测试,在最后关头发现任何重大缺陷的时候通知我们,并且大家可以开始升级程序来使用它。我们将于一月份正式发布最终的ASP.NET MVC3 RTM版本。

VS2010VS2010 SP1 Beta上都能使用

现在的ASP.NET MVC 3 RC2发布版可以在Visual Studio 2010/Visual Web Developer 2010 Express上使用,也可以在最新发布的VS 2010 SP1 Beta上使用。

这意味着你不一定要安装VS2010 SP1(或SP1 Beta)来使用它。 它在已经发售的Visual Studio 2010上也能使用。VS2010 SP1新增了一些不错的功能(包括VS中的IIS Express和SQL CE支持),能让ASP.NET表单和ASP.NET MVC程序开发人员获得更好的体验,我下周将写一篇关于它的博文。

缺陷和性能修复

今天的ASP.NET MVC 3 RC2版本包含对很多缺陷的修复和性能的优化。我们最近的性能测试显示ASP.Net MVC 3 比ASP.Net MVC2更快,现有的ASP.NET MVC 程序在升级成ASP.NET MVC 3后执行性能也会有一点小小的改善。

最后的调整和Fit-N-Finish

除了修复缺陷和优化性能外,今天的RC2版本还包含一些最后关头的功能调整和针对ASP.Net MVC3新功能的“fit-n-finish”改动。 我们在公开预览中收到的反馈和建议在指导这些最后的调整中功不可没,我们真的非常感谢这些发送反馈给我们的人的支持。

下面简短地列出今天的版本相对上个月的ASP.NET MVC3 RC发布版的一些功能的改动/调整。

jQuery改进和jQuery UI的加入

ASP.Net MVC3默认的项目模板已自动升级并加入jQuery 1.4.4和jQuery Validation1.7.

我们非常激动地宣布:我们今后将把jQuery UI加入到我们的默认 ASP.NET 项目模板中。jQuery UI提供了一套强大的UI 窗体相关的额外部件和功能。 在你创建新的ASP.NET MVC3项目的时候,它将被默认添加到你的项目的\脚本文件夹下。

改进的视图基架

含添加-视图对话框的基架视图所使用的T4模板现在用Html.EditorFor生成视图,而不是用Html.TextBoxFor类的辅助函数。这个改动让你能有选择地用元数据诠释模型(使用数据批注属性),从而更好地定制运行时UI的输出。

添加视图基架现在也支持改进的探测方法,以及在模型上使用主键信息(包括支持命名规范,如ID, ProductID等等)。 比如: 添加视图对话框使用这个信息来保证主键值不会是像可编辑表字段一样的基架,也保证了视图之间的链接和主键信息一块被正确的自动生成。

默认的编辑和生成模板现在也包含对客户端验证所需的jQuery脚本的引用。基架表单视图现在默认支持客户端验证(无需额外的步骤)。ASP.NET MVC3的客户端验证通过一个隐藏的javascript方法来实现——让页面加载更快,也更干净。

[Controller Sessionstate]->[Session State]

ASP.Net MVC3对会话需求更少的控制器增加了相应的支持。在最初的RC中,你要使用一个[ControllerSessionState]属性来定义它。在RC2中,我们把它简化成[SessionState]:

注意除了关闭会话状态,你还能将它设置成只读(对你只需要读取而不需要更改会话状态的特殊请求的webFarm场景很有用)

[SkipRequestValidation] –> [AllowHtml]

ASP.NET MVC内置了防止HTML和跨站脚本注入攻击的支持。当有人试图输入HTML内容进行提交的时候,它会抛出一个错误。要启动它的话,程序员需要显式地指明这是被允许的(但愿他们已经在自己的应用程序中安全地支持它)。

ASP.NET MVC3现在支持一个新属性,你能将它应用到模型/视图模型的属性上,表明HTML输入是开启的。这让我们能遵循DRY(Don’t Repeat Yourself,特指在程序设计中避免重复代码)的方式获得更精确的保护。在上个月的RC版本中,这个属性被命名为 [SkipRequestValidation]。为了让它更直观,在RC2中,我们重命名为[AllowHtml]:

在模型/视图模型中设置上面的[AllowHtml]属性会使ASP.NET MVC3在模型只在绑定到那个属性时关闭HTML注入防护。

Html.Raw()辅助方法

ASP.Net MVC3中引入的新Razor视图引擎,自动默认HTML 编码输出。 这为我们防止HTML和脚本注入攻击提供了新一层的防护。

我们在RC2中加入了Htmal.Raw()辅助方法,让你能显式指明你不想HTML编码输出,而是希望将内容呈现为“当作-是(as-is)”

视图模式/视图->视图包

ASP.NET MVC(自V1起)就支持一个带控制器和视图的ViewData[]字典,让程序员可以用一种后期绑定的方式从控制器往视图传值。这种方法能用来替代强类型模型类或与之一起使用。下面的代码演示一个常见的例子——一个强类型Product模型通过ViewData[]字典传给视图和两个后期绑定的变量:

在ASP.NET MVC3中,我们引入一个新API,它利用.NET 4中的动态类型支持来设置、返回这些值。它允许你使用标准的“句点”符号来制定需要传输的任何数量的额外变量,而且不需要你定义一个强类型类来实现。

在早前的ASP.NET MVC3的预览版中,我们通过控制器基类中命名为“ViewModel”的动态属性和视图模板中的“View”属性来暴露这个API。 很多人发现这两个不同的名字容易混淆,有些人还说在这个地方使用ViewModel这个名字让人容易混淆——因为你常常在ASP.NET MVC中会创建强类型视图模型(ViewModel)类,而不会不使用这个API。

在RC2中我们在控制器和视图中都暴露了一个同名的动态属性——ViewBag。它是一个动态集合,允许你从控制器传入额外的数据到你的视图模板来帮助生成响应。 下面是一个示例,用来说明我们如何使用它传输一个时间戳信息和一列目录到我们的视图模板:

下面的示例,展示我们的视图模板(强类型,期望返回一个Product类做为它的模型)如何使用我们往Viewbag中传入的信息来生成响应。特别的是,注意我们是如何使用传入动态Viewbag集的一列目录来帮助我们设置Product对象的CategoryID属性的。

上面的控制器/视图绑定然后会生成一个HTML response,如下。

输出缓存改进

在声明控制器动作方法的[OutputCache ]属性的时候,Asp.NET MVC 3的输出缓存系统不再要求你指定VaryByParam属性。 在你的动作方法有显式参数的时候,MVC3现在能自动更改输出缓存项——这允许你用下面这样的代码干净地实现操作时的缓存输出:

除了支持全页输出缓存,ASP.NET MVC3还支持部分页缓存——这允许你缓存局部的输出,并在不同的请求和控制器之间重用。 RC2中改进了针对部分页缓存的[OutputCache]行为,使次要内容缓存项根据输入参数的不同而变化,而不是相对于顶层请求的URL结构而改变——这使缓存场景比之前的RC版本更加容易而且强大。

@model声明不加空格

在之前的预览本中,在顶层的Razor视图定义强类型@model会在生成的HTML输出中增加一个空行。 这个问题已经被修复,声明不会再加空格。

更改“Html.ValidationMessage”方法以显示第一条有用的错误信息

为了显示首个有用错误信息,而不是简单地显示第一个错误,Html.ValidationMessage()辅助函数的行为进行了更改。

在模型绑定中,ModelState字典能加入各种关于属性错误信息的源代码,包括来自模型本身(如果实现了IValidateableObject),来自应用到属性的验证属性,以及来自访问属性时抛出的异常。

当Html.ValidataionMessage()方法显示一个验证信息,它会跳过包含异常的模型状态入口,因为这些大多数都是不开放给终端用户的。相反,方法搜寻第一个没有异常的验证错误,然后显示相关信息。如果没有找到这样的信息,它将默认显示与第一个异常相关的错误信息。

RemoteAttribute “Fields”-> “AdditionalFields”

ASP.NET MVC3内置远程验证支持及其验证架构。这表示ASP.NET MVC3使用的客户端验证脚本库能自动回调你在服务器端暴露的控制器,在用户编辑表单的时候能用来决定一个输入元是否真实有效(允许你提供实时验证更新)。

要实现远程验证,你可以对模型/视图模型属性使用[Remote]属性,标明远程验证的时候必须被调用的控制器、动作。在RC中这个特性有个“Fields”的属性,我们可以用来指定必须从客户端传到服务端的新增的输入素,从而实现验证逻辑。为更清晰地表明这个属性的用处,在今天的RC2发布中我们将其重命名为“AdditionalFields”。

ViewResult.Model和ViewResult.ViewBag属性

现在ViewResult类在类外暴露“Model”和“ViewBag”属性。这样你可以更简单地对返回视图的控制器进行单元测试,不需要通过ViewResult.ViewData.Model属性访问模型。

安装注意事项

你能从这里下载和安装ASP.NETMVC3 RC2, 它能装于之前的ASP.NET MVC3 RC版本之上(安装仅替代原先的内容)。

上面的安装将不会改动的一个组件(如果你已经安装了的话)是NuGet Package Manager。如果你已经安装NuGet,请打开Visual Studio 扩展管理器(通过工具->扩展菜单项),点“更新”。你会看到NuGet列在那里——请点它旁边的“更新”按钮, 将VS的扩展升级到今天的版本。

如果你没有安装NuGet(没有安装ASP.NET MVC RC版本),NuGet将被作为ASP.NET MVC3的一部分安装,你无须再做任何额外操作。

总结

我们真的离ASP.NET MVC3的终极版发布非常接近了。我们家将于下个月发布最终的”RTM”版本。距离ASP.NET MVC2推出才刚过7个月,团队就能在这个版本中增加这么多的新功能和新改进(Razor,隐藏的JavaScript,NuGet,依赖注入,输出缓存,以及更多更多),我觉得非常惊讶。 我将在接下来的几周写几篇博文更深层次地介绍他们。

希望对您有所帮助。

附:除了写博客之外,我还使用Twitter做快速更新并分享链接。请关注我:twitter.com/scottgu

.net 一些基础操作_第4张图片

Posted in 未分类  |  Leave a comment

ASP.NET MVC 3, IIS Express, SQLCE 4,Web Farm Framework, Orchard, WebMatrix发布

[原文发表地址]Announcing release of ASP.NET MVC 3, IIS Express, SQL CE 4, Web Farm Framework, Orchard, WebMatrix

[原文发表时间]January 13, 2011 12:11 PM

我非常高兴地在这里给各位介绍今天发布的几个产品:

  • ASP.NET MVC 3
  • NuGet
  • IIS Express 7.5
  • SQL Server Compact Edition 4
  • Web Deploy and Web Farm Framework 2.0
  • Orchard 1.0
  • WebMatrix 1.0

以上产品全部免费。 他们是在.NET 4和 VS2010发布版上创建的,为ASP.NET(包括Web Forms和MVC)和Microsoft Web Server stack增添了很多新的价值。

ASP.NET MVC 3

今天我们发布ASP.NET MVC 3的终极版。你可以从这里下载安装ASP.NET MVC 3,也可以根据需要从这里下载ASP.NET MVC 3源代码(发布在一个与OSI兼容的开源代码许可下)。

ASP.NET MVC 3是一个重要的更新,带来很多很棒的功能。其中的改进包括:

Razor

ASP.NET MVC 3的发布包含一个称为“Razor”的新视图引擎选项,此外还继续支持、增强现有的.aspx视图引擎)。Razor最小化了编写一个视图模板时所需的字符键入数,实现了一个快速流畅的代码编程工作流。

和大多数模板语法不一样,通过Razor,你无需为了在HTML中显式指定服务器块的开端和结尾而中断你正在进行的编码。Razor解析器足够聪明,能根据你的代码推断出来这些信息。这实现了一种紧凑而富有表达力的语法,键入非常干净,快速而有趣。

你可以从我过去6个月中发表的几篇关于Razor的博文中获知更多。

  • Razor介绍
  • Razor中的新关键词:@model
  • 用Razor实现布局
  • 通过Razor实现服务器端注释
  • Razor的@和语法
  • 用Razor实现隐式和显式代码碎块
  • Razor中的布局和章节

今天的发布版对Razor支持Visual Studio 2010和免费Visual Web Developer 2010 Express上的完全代码智能感知(VB和C#)。

Java Script改进

ASP.NET MVC 3实现了丰富的JavaScript场景,并利用了新兴的HTML5的功能。

ASP.NET MVC3中的AJAX和验证辅助程序现在使用基于Unobtrusive JavaScript的方法。Unobtrusive JavaScript避免往HTML中注入内联JavaScript,通过使用新HTML5中的“Data-”属性约定(也方便在早期浏览器中使用——包括IE 6)实现更干净的行为分离。这让你的HTML紧凑而干净,让它更容易根据需要换掉或定制JS库文件。

ASP.NET MVC 3现在内置支持从客户端JavaScipt发送基于JSON的参数到服务器端的操作函数。 这易于交换客户端和服务器端数据以及构建丰富的JavaScript前端。我们认为这个功能在以后的场景包括客户端模板及数据绑定(包括ASP.NET团队最近往jQuery项目中贡献的jQuery插件)中会尤其有用。

之前发布的ASP.NET MVC的版本中包括核心jQuery库。 ASP.NET MVC 3现在也包含jQuery验证插件(我们的验证辅助程序在客户端验证场景中会用到该插件)。我们今天的发布,也默认包括jQuery UI在内(为你在项目内提供了一套丰富的客户端JavaScript UI小工具)。

改良的验证

ASP.NET MVC 3包含很多验证增强,将数据使用变得更加方便容易。

客户端验证现在在ASP.NET MVC 3中是默认开启的(使用一个onbtrusive javascript实现)。今天的发布也包括针对远程验证的内置支持——让你用一个验证属性来标记模型类, 当在客户端验证输入时,该属性使ASP.NET MVC向一个服务器方法发送远程验证调用。

ASP.NET MVC3现在也支持.NET 4的 System.ComponentModel.DataAnnotations命名空间引入的验证功能, 包括支持新的IValidatableObject接口——它使你能实现模型层验证,并允许你提供针对模型整体状态或模型中两个属性间的特定验证错误信息。

ASP.NET MVC 3还支持.NET 4中对ValidationAttribute类的改进。 ValidationAttribute现在支持一个新的IsValid重载,提供了更多关于当前验证上下文(比如正在验证的是什么对象)的信息。这实现了更丰富的场景,让你在模型中另一个属性值的基础上验证当前值。 我们已经随ASP.NET MVC 3发布了一个内置的[Compare]验证属性,通过这个支持,能更易于在模型外比较和验证两个属性值。

你能通过ASP.NET MVC 使用任何数据存取API或技术。 去年我们和.NET 数据组紧密合作以确保新的实体框架代码优先库(EF Code First library)能很好地在ASP.NET MVC应用程序上使用。 我的这两篇博文涵盖了最新的EF Code First预览,演示了如何通过ASP.NET MVC 3来使用它,以便更简单地编辑数据(配有端对端的客户端+服务器验证支持)。实体框架代码优先终极版将在近几周内发布。

今天我们还发布了新的MvcScaffolding项目的首个预览版。它让你能很容易地搭建ASP.NET MVC 3控制器和视图,并能很好地与实体框架代码优先一起使用(而且是可插拔的,以支持其他的数据访问接口)。现在你能通过NuGet安装它,你可以从Steve Sanderson写的关于MvcScaffolding的博文中了解更多。

输出缓存

之前的ASP.NET MVC版本支持URL或操作方法级别的输出缓存内容。

ASP.NET MVC V3中我们也支持部分页面输出缓存——允许你很容易地将一个响应的缓存区域或片段输出,而不是输出全部。 这个功能在很多场景中很有用,让你能大幅度地减少你的应用程序在服务器端所需要做的操作。

ASP.NET MVC 3中这个新的部分页面输出缓存支持使你很容易地在一个站点的不同的URL间,重用一个页面上缓存的局部区域或片段。它支持将内容缓存在服务器端,或根据情况缓存在一个像Windows Server AppFabric或memcached类似的分布式缓存服务器上。

我以后将发表一些教程来展示如何在局部页面场景中使用ASP.NET MVC 3的新输出缓存支持。

更好的依赖注入

ASP.NET MVC 3能更好地支持依赖注入(Dependency Injection, DI)和DI/IOC容器的整合。

使用ASP.NET MVC 3,你不必为了用控制器依赖注入的实现而创建定制ControllerFactory类。取而代之,你只需用ASP.NET MVC 3注册一个依赖注入框架,它就会解决所有的依赖,不但适用于控制器,而且还适用于你的应用程序中使用的视图、操作筛选器、模型绑定器、数据提供程序、验证提供程序以及模型元数据提供程序。

这让你易于在项目内很干净地整合依赖注入。

别的改良

ASP.NET MVC 3包含很多其他改良,不但能减少你所需要编写的代码量,而且让你写的代码更干净。 这里有几个示例:

  • 改进的新项目对话框,使从模板创建一个新的ASP.NET MVC 3项目变得更加简单
  • 改进的新增->视图基架支持,更易于生成更干净的视图模板。
  • 新ViewBag属性,使用.NET 4的动态支持,使将控制器中的后期绑定数据传向视图变得更加简单。
  • 全局筛选器支持,允许在一个应用程序中指定贯穿所有控制器的交叉筛选器属性(比如[HandlerError])。
  • 新的[AllowHtml]属性,允许在绑定表格数据到模型时的更细颗粒度的请求验证。
  • 无会话控制器支持,更好地控制一个控制器的SessionState是开启还是关闭
  • 针对常见HTTP场景的新ActionResult类型,比如HttpNotFoundResult和RedirectPermanet
  • 新Htmal.Raw()辅助函数,用来指定输出不能通过HTML编码。
  • 新的Crypto辅助函数,用来Salt和hash密码。
  • 更多更多……

了解关于ASP.NET MVC 3的更多信息

我们本周将在 http://asp/net/mvc上发布很多教程。下面是今天发布在该网站上的两个很棒的ASP.NET MVC3教程:

  • 构建你的第一个ASP.NET MVC 3应用程序: VB和C#
  • 构建ASP.NET MVC 3音乐商店

以后我们还将在http://asp.net /mvc 上继续发布其他的ASP.NET MVC 3教程和视频。请定期去访问看看是否有新的教程吧。

如何升级现有项目

ASP.NET MVC 3与ASP.NET MVC 2兼容——这意味着将现有的MVC 项目升级到ASP.NET MVC 3很简单。

ASP.NET MVC 3版本中的新功能是基于在我们之前已经在MVC 1和MVC 2中做过的基础性工作上的——这意味着你所获得的技能,知识,库和书本知识都能直接应用在MVC 3发布版上。MVC 3加了新功能, 同时它也不会废弃现有功能。

你可以参考发行说明中的手动升级步骤来升级现有的ASP.NET MVC 2项目。或者,你能使用这个自动化ASP.NET MVC 3升级工具来很方便地升级现有的项目。

本地化版本

今天发布的ASP.NET MVC 3版本是英文版的。我们将在几天之后发布其本地化版本(九种语言)。一旦他们可用,我将在博文中给出下载链接。

NuGet

今天我们还发布了NuGet——一个免费的开源包管理器,方便你在项目中找到、安装和使用开源代码库。它能和所有的.NET 项目类型(包括ASP.NET web窗体,ASP.NET MVC,WPF,WinForms,Silverlight,和类库)一起使用。你可以从这里下载和安装。

NuGet让维护开源项目(比如Moq, NHibernate,Ninject,StructureMap,NUnit, Windsor,Raven, Elmah等.NET项目)的开发工程师们可以将他们的库文件打包注册在一个可供搜索的在线空间/目录里面。包括全部Visual Studio集成的客户端NuGet工具让需要使用其中的库文件的.NET 程序员可以很容易地在他们所开发的项目中找到(那些文件)并安装。

NuGet负责管理库文件之间的依赖关系(比如: 库文件1依赖于库文件2)。它还使你的项目以后易于升级/删除库。它支持web.config文件更新(如果一个包需要配置环境)。 它还允许将Powershell脚本(比如:基架命令)打包到项目内。重要的一点是,NuGet是透明而且干净的——不在系统层面安装任何东西,而是主要专注于如何让你简单地管理项目中所使用到的库文件上。

我们引入NuGet的目的是希望能尽量简单地在.NET项目中集成开源库文件。

NuGet Gallery

本周我们还开通了一个Beta版的Http://nuget.org网站——所有人都可以在这个在线空间很简单地通过NuGet搜索和浏览可用的开源包。 现在这个网站还允许程序员根据需要提交其愿意分享给别人的新包。 你可以从这里获知如何创建和分享一个包。

现在NuGet Gallery里面已经有成百个开源.NET项目了。我们希望将来有更多。

IIS Express 7.5

今天我们还发布IIS Express 7.5。 IIS Express是针对开发者场景优化过的IIS 7.5免费版。它适用于ASP.NET Web Forms和ASP.NET MVC 项目类型。

我们认为IIS Express整合了当前集成到Visual Studio内的ASP.NET web服务器的易用性与IIS的全副功能。 具体为:

  • 它是轻量级的,容易安装(少于5M的下载量,安装迅速)
  • 不需要管理员账号来从Visual studio运行、调试应用程序
  • 它实现了一个完整的Web服务器功能集——包括SSL, URL重写,和其他IIS 7.x模块
  • 它支持并实现和IIS 7.x所支持的同样的可扩展模型和Web.Config文件设置
  • 它能与完整IIS Web服务器以及ASP.NET 开发服务器并行安装(互不冲突)
  • 它可以使用在Windows XP及以上操作系统上——给你在所有Windows 操作系统平台上提供完整的IIS 7.x开发者功能集。

IIS Express(像ASP.NET开发服务器)能被迅速从磁盘目录下启动去运行一个网站,不需要通过任何注册、配置步骤。这使得它在开发场景中非常容易启动和运行。 如果你需要一个轻量级的服务器,你还能选择分布式IIS Express。标准的IIS Express EULA现在包含再分配权限。

Visual Studio 2010 SP1增加了对IIS Epxress的支持。 请阅读我写的关于VS 2010 SP1和IIS Express的博文获知它所实现的功能。

SQL Server Compact Edition 4

今天我们还发布SQL Server Compact Edition 4(又称为SQL CE 4)。 SQL CE是一个方便数据存储的免费内嵌数据引擎。

无需安装数据库

SQLCE的使用不需要你运行一个安装程序或安装一个数据库服务器。简单地将SQLCE 支持文件拷贝到你的ASP.NET应用程序的\bin目录下,就可以将它作为数据库引擎使用了。 无需安装或额外的安全权限就可运行。 你不需要有机器上的管理员账号。 只要将你的web应用程序拷贝到任何服务器上,它就可以使用。 即使对于运行在一个web宿主环境中的中等信任应用程序也是如此。

SQL CE在你的ASP.NET应用程序中的内存中运行, 它会在你第一次访问一个SQL CE 数据库的时候启动,在你的应用程序卸载的时候自动关闭。SQL CE数据库以文件形式存储在你的ASP.NET 应用程序的\App_Data文件夹下。

和现有的数据API一起使用

SQL CE 4能和现有的基于.NET的数据API一起使用,支持一种与SQL Server兼容的查询语法。这意味着:通过SQL CE,你既能使用像ADO.NET一样的现有数据API,又能使用像实体框架和NHibernate一样的更高级别的ORMs。这样你可以使用与目前已知的相同的数据编程技能和数据API。

支持开发、测试、产品场景

SQL CE现在能用于开发场景,测试场景,和轻量级产品使用场景中。随着SQL CE 4的发布,我们已经完成所有确保SQLCE不会在多线程服务器场景(比如ASP.NET)中故障或死锁的工程工作。这相对于之前的SQLCE是一个很大的改进——之前的设计针对于只有客户端的场景,并且阻止了在web服务器环境下的运行。自SQLCE 4起,你也能在web服务器中使用它了。

对SQL CE来说没有任何许可限制。完全免费。

VS2010 SP1中的工具支持

Visual Studio 2010 SP1增加了对SQL CE 4和ASP.NET项目的支持。请阅读我写的关于VS 2010 SP1和SQLCE 4的博文获知更多关于它如何实现的信息。

Web部署和Web Farm Framework 2.0

今天我们还发布Microsoft Web Deploy V2和Microsoft Web Farm Framework V2。 为将ASP.NET 应用程序部署到不管是单个服务器还是一个web农场的机器上,这些服务提供了一个灵活而强大的方法。

你可以从我之前发表的博文中获知更多关于这些功能的信息:

  • Microsoft Web Farm Framework简介
  • 用Microsoft Web Deploy自动部署

请访问http://iis.net网站获知更多信息并下载。 都是免费的。

Orchard 1.0

今天我们还发布Orchard v1.0。

Orchard是一个基于社区的免费开源项目。 它提供社区外的内容管理系统和博客系统支持,实现了不需要写代码就轻松创建和管理网站(网站所有者可以通过基于浏览器的内置Orchard编辑工具定制网站)。请阅读这些教程获知关于如何建立和管理你自己的Orchard网站的更多信息。

Orchard本身是用Razor视图模板创建的一个ASP.NET MVC 3应用程序(默认使用SQL CE 4进行数据存储)。希望扩展Orchard网站的定制功能的开发人员可以将它像一个Visual Studio项目一样地打开并编辑——往上添加新的ASP.NET MVC 控件、视图。

WebMatrix 1.0

WebMatrix是Microsoft提供的一个新的免费web开发工具,它提供一系列能在网站开发中很容易实现的技术。 开发人员可以用它通过从一个在线web应用程序空间(包括像Umbraco,DotNetNuke,Orchard,WordPress, Drupal和Joomla等流行的应用程序)浏览和下载一个应用程序模板来建立一个新的网站。此外,也支持开发人员从头开始创建和编写一个网站。

WebMatrix专注于任务,帮助指导开发人员开发网站。WebMatrix包括IIS Express, SQL CE 4和ASP.NET ——集web服务器、数据库和编程框架一体。它还包括内置web发布支持,易于找到虚拟主机服务商并将站点部署上去。

你可以从我夏天写的介绍WebMatrix的博文中了解更多。请现在就访问http://Microsoft.com/web来下载和安装它吧。

总结

对于今天的这些发布,我感觉非常的激动——他们给使用ASP.NET、Visual Studio和Microsoft Web 服务器实现的网络开发锦上添花。

今天这个分享凝结了很多人的努力。谨此代表我们的整个团队——祝你们用的开心!

Scott

附:除了写博客之外,我现在也用Twitter来即时更新状态和分享链接。请关注我:twitter.com/scottgu

.net 一些基础操作_第5张图片

Posted in 未分类  |  Leave a comment

在没有安装ASP.NET MVC 3的web服务器上运行一个ASP.NET MVC 3应用程序

[原文发表地址] Running an ASP.NET MVC 3 app on a web server that doesn’t have ASP.NET MVC 3 installed

[原文发表时间] January 18, 2011 10:33 PM

上周我们发布了几个新的Web产品——包括ASP.NET MVC 3。自那时起,我们就收到了很多很好的反馈,并且产品有大量下载。

一些用户最近问到我的一个问题是:我的虚拟主机提供商还不支持ASP.NET MVC 3——能知道他们什么时候会安装吗?

好消息是你无需等待他们在其web服务器上安装任何东西。只要你的虚拟主机提供商支持.NET 4,现在你就能在它上面构建和部署ASP.NET MVC 3应用程序——不需要虚拟主机提供商做任何准备工作。下面的博文讲述如何实现。

一些背景

我们支持两种方法来安装和使用在机器上支持ASP.NET MVC 3的程序集:

1. 将ASP.NET MVC 3程序集装在机器上的一个中心位置, 由web项目从那里引用/使用。

2. 将ASP.NET MVC 3程序集拷贝到你的web项目的\bin目录下, 让你的web项目从那里引用/使用。

第一个方法是我们在Visual Studio中使用的默认方法, 有利于简单通过windows更新维护ASP.NET MVC 3程序集(在一个糟糕的缺陷事件中)。

第二种方法也是完全支持的, 并且胜在不需要在机器上显式安装ASP.NET MVC 3来使用它。相反,你只需要拷贝/ftp你的web应用程序到一个服务器上(携带包含在应用程序的\bin目录下所包含的ASP.NET MVC程序集一起),它就可以使用了。如果你的虚拟主机提供商在服务器上并没有显式安装ASP.NET MVC 3,你最好用这种方法。

方法一: ASP.NET MVC程序集之基于GAC的引用

当你在一台机器上安装ASP.NET MVC 3的时候,安装过程中有一些程序集会被自动注册到GAC(global assembly cache)里面。GAC提供一个安装和维护(通过Windows更新).NET 程序集的统一地方。因为它提供了一个很简易的方法让我们能更新并维护程序集,默认情况下ASP.NET MVC 项目从那里引用实现ASP.NET MVC的程序集。

如果你拷贝一个完美工作的ASP.NET MVC 3项目——它默认通过GAC引用ASP.NET MVC 3运行时程序集——到一台没有安装ASP.NET MVC 3的机器上,你就会在运行你的应用程序的时候看到下面这样的一个错误信息:

上面的错误表示在运行ASP.NET MVC 3时所需要的一个程序集在GAC中无法找到。 在机器上安装ASP.NET MVC 3会修复这个问题,并让你的应用程序得以运行。

方法二:对ASP.NET MVC程序集之基于\Bin地址的引用

你的项目可用的另外一种方法是从你的web应用程序的\bin地址下部署和引用ASP.NET MVC 3运行时的程序集。这样做的好处是你无需在机器上显式安装ASP.NET MVC 3以运行你的web应用程序。 相反,你只需要拷贝/ftp你的web应用程序到现有的.NET 4服务器上,它就可以使用了。这种方法对“完全信任”和“中度信任”场景都很适用——这意味着它甚至能与低成本共享主机提供一起使用。主机提供商无需再做任何注册、安装、操作。

让你的web项目通过“bin部署”ASP.NET MVC 3程序集非常容易,只需要大概短短的2分钟。下面是所需的步骤:

将ASP.NET MVC 3应用程序通过\bin部署到一个虚拟主机提供商的步骤

一旦配置了基于\bin的部署,你用ASP.NET MVC 3构建的应用程序就可以在装有.NET 4的任何web服务器上运行了。 只需它拷贝/ftp到web服务器上即可。你无需再对虚拟主机提供商做任何操作来实现——即使对低成本共享主机账户也是如此。

找到一个ASP.NET 虚拟主机提供商

你能浏览Windows Web Hosting Gallery来寻找合适的基于 ASP.NET的windows主机服务商(全部支持ASP.NET 4):

Windows Web Hosting Gallery允许你通过不同的国家和服务级别来筛选、浏览主机提供商。它还允许你很容易地通过“共享主机”,“虚拟主机”和“专用主机”来筛选。

“共享主机”指有很多客户运行在单个web服务器上的提供商,你没有远程登录服务器的管理员权限。“虚拟主机”允许你将自己的虚拟机映像置于远程服务器上——通常包含操作系统的管理员权限和远程终端服务器访问权限来管理它。“专用主机”服务商提供一台完整的物理服务器, 通常还提供操作系统的管理员权限和远程终端支持。

基于Windows的web主机性价比非常高,从低至每月$2.75的共享主机到每月$23的虚拟主机。以上所有的提供商都能通过\bin部署方法来运行ASP.NET MVC 3.

总结

你能将基于ASP.NET MVC 3的应用程序部署到任何有.NET 4的web服务器上——无需等待虚拟主机服务商在服务器上显式安装ASP.NET MVC 3。 简单地通过上面的步骤就可以将你的项目转化为使用基于\bin部署的ASP.Net MVC 3程序集, 然后你就能将你的应用程序拷贝到基于ASP.NET 4的服务器上,就可以使用它了。

希望这些对您有所帮助。

Scott

附:除了写博客之外,我现在也用Twitter来即时更新状态和分享链接。请关注我:twitter.com/scottgu

.net 一些基础操作_第6张图片

Posted in 未分类  |  Leave a comment

ASP.NET MVC3:用Razor实现隐式和显式代码碎块(code nuggets)

[原文发表地址 ] ASP.NET MVC 3: Implicit and Explicit code nuggets with Razor

[原文发表时间] December 16, 2010 11:23 PM

这是我涵盖ASP.NET MVC3新功能博文系列中的又一篇:

· Razor中的新@模型关键字(10月19日)

· Razor中的层(10月22日)

· 用Razor实现服务器端注释(11月12日)

· Razor的@:和语法(12月15日)

· 用Razor实现隐式与显式代码碎块(今天)

在今天的帖子中我将继续讨论如何使用Razor在你的视图模板中隐式和显式定义代码碎块(code Nuggets), 并演示一些示例。

用Razor实现流畅编程

Asp.net mvc3发布包括一个新 “Razor”视图引擎(和一个现有的.aspx视图引擎)。你可以从我介绍Razor的帖子中更多地了解Razor与我们引进它的缘由以及它所支持语法。

Razor尽量减少编写一个视图模板需要敲入的字符数,实现流畅快捷的编码工作流。与大部分模板的语法不同,你不会因为需要在HTML中标注服务器端代码块而中断代码编写。代码分析器足够聪明,它能够从你的代码里推断出是否为服务器端代码。 这使其简洁、富有表现力的语法输入能够干净,快速,有趣。

比如下面的Razor代码段能用来迭代一组产品(Products),并输出一个链接到相应产品页面的产品名字

    列表:

    运行时,上面的代码输出如下:

    请注意上面是如何在一个“foreach”循环内嵌入两个代码块的。其中一块输出商品的名字,另一块则将ProductID包含于一个超链接内。注意我们并不需要显式将代码碎块括起来——Razor能足够聪明地隐式识别出这种情况下代码段的起始。

    Razor如何隐式识别代码碎块

    Razor没有定义自己的语言。你在Razor代码碎块中所写的代码都是标准C#或VB。这允许你重用现有的语言技能,无需重新学习一种定制语法。

    Razor解析器内置了很多智能,任何时候你都无需显式指定编写的C#/VB代码碎块的结尾。它让编码更流畅,更有效率, 让模板语法更美妙,干净,简练。下面的场景中,Razor将帮你隐式指定代码碎片范围, 让你无需显式标明。

    获取属性

    Razor允许你输出一个变量值,或通过标点“.”引用输出其次属性。

    你也能用标点符号“.”获取更底层的子属性

    数组、集合索引

    Razor允许你为集合或数组添加索引:

    调用方法:

    Razor还允许你调用方法:

    注意上面这些场景中我们是如何不需要显示定义代码块的结束位置的。 Razor能悄悄地为我们识别出代码块的结尾。

    Razor针对代码碎块的解析算法

    下面的算法捕获了我们支持Razor中的“@”表达式所需要用到的核心解析逻辑,实现上面的隐式代码碎块:

    1. 解析一个标识符——只要遇到在C#或VB中无效的标识符,我们马上停止解析,转到第二步;

    2. 检查括弧——如果我们看到“(”或者“[”,移到2.1,否则转到第三步;

    1. 一直解析直到遇到相匹配的“)”或“]” (我们追踪嵌套的“()”和“[]”对,忽略字符串或注释中的“()[]”)

    2. 回到第二步

    3. 检查“.”——如果找到,转到3.1,否则就不将“.”视为代码,转到第四步

    1. 如果“.”后面的字符是一个有效标识符,接受“.”,并回到第一步,否则, 转到第四步

    4. 完成!

    代码与内容的区别

    步骤3.1是上面算法中特别有趣的部分,它让Razor能区分标识符是被当作代码语句的一部分还是当作静态内容处理。

    注意在上面的片段中我们是如何在代码碎块末尾放置?与!的, 这些都是C#中的合法标识符,而当后面带有空格的时候,Razor就能够隐式识别出他们必须被当做静态字符串内容而不是代码语句的一部分。这节省了我们的击键次数,很酷。

    Razor中的显式代码碎块

    Razor足够聪明,能隐式识别很多代码碎块场景。 但是有的时候你仍然想要/需要显式指定你的代码碎块语句的范围。 @(表达式)语法允许你实现这个:

    你能在@()语句中写任何你想要的C#/VB代码语句。 Razor会将()包含的字符视为代码碎块语句的显式范畴。 下面是我们能用显式代码碎块功能的几个场景:

    运算数学计算、修改

    你能在一个显式代码碎块内做数学运算:

    往代码表达式添加文本

    你能用显式表达式语句往代码碎块末尾添加静态文字, 无需担心它被解析成代码:

    上面我们往一个元素的src属性内嵌入了一段代码碎块。它允许我们用类似”/Images/Beverages.jpg”的URLs链接到图片。 没有显式括号, Razor会在CategoryName上寻找一个”.jpg”的属性(并抛出一个错误)。 用显式的方式,我们能很清楚地指定代码结束与文本开始的地方。

    使用泛型和Lambdas

    显式表达式允许我们在代码表达式中使用泛型类型和泛型方法——从而避免混淆泛型中的<>字符和标签元素。

    还有一个。。。属性中的智能感知

    我们在上面几个示例的HTML属性中使用了代码碎块。 Visual Studio中的Razor代码编辑器此时仍然支持VB/C#智能感知,这是一个非常不错的功能。

    下面是在一个href属性中使用隐式代码碎块时的C#代码智能感知示例:

    下面是在一个 src=””属性中使用一个显式代码碎块时的C#智能感知的示例:

    注意上面两种情形中,即使是代码表达式内嵌于一个HTML 属性中,我们仍能获得完全代码智能感知(这是现有的.aspx代码编辑器所不支持的)。这使得编写代码更加容易, 让你能随时随地利用智能感知。

    总结

    Razor为流畅编码工作流实现了一套干净简洁的模板化语法。Razor能隐式确定代码碎块的范围,减少按键次数,让你的代码真正干净。

    必要的话, 你也能显式用@(表达式)语法设定代码表达式的范围, 从而更明白地表达你的意图, 防止混淆静态标记与代码语句。

    希望有所帮助。

    .net 一些基础操作_第7张图片

Posted in 未分类  |  Leave a comment

Microsoft Web Farm Framework 2.0

[原文发表地址] Microsoft Web Farm Framework 2.0

[原文发表时间] January 20, 2011 9:47 PM

IIS 团队最近发布了Microsoft Web Farm Framework 2.0。你可以从这里了解更多信息并下载正式第二版。

什么是Microsoft Web Farm Framework?

Microsoft Web Farm Framework是我们支持的一个免费产品,易于部属和管理一个Web服务器群,支持在服务器群里自动安装和配置平台组件,还能自动同步和部署ASP.NET应用程序。

它支持负载均衡,能在服务器群中自动升级,这样不会(因维护)让用户无法访问站点/程序(它可以每次自动从负载均衡的服务器池里拿出一台升级,然后将其放回)。

几个月之前我发表了一篇教程,演示如何配置和使用Microsoft Web Farm Framework程。 你可以从这里阅读。

V2发布版中的新功能

本周的RTW发布版包括在之前Beta版中所没有的几个新增功能,包括:

工作流生成器能被用来定义和调度运行在服务器群中的自定义任务。 任务可被调度为定期运行或由管理员手动启动。这类任务的一个例子是用msdeploy命令来部分同步网站内容。

Windows 凭证存储区(Windows Credential Store)支持将用于部署服务器的管理员凭证存储在一个安全的Windows凭证存储区。这就为在Web Farm Framework中处理凭证时新加一层安全防护。

第三方负载均衡支持:由Web Farm Framework的可扩展性实现。 现在能配置Web Farm Framework与硬件负载均衡器集成,而不是依靠(免费的)IIS应用程序请求路由模块。

对高级MSDeploy操作的改进支持。更多MSDeploy功能现在可以在Web Farm Framework的高级配置场景中使用。

对同步大量文件的改进支持。修正了beta版中Web服务器群中节点间同步大量文件相关的一些问题。

本周的发布版还包括很多缺陷修复和性能优化。

获知更多

请访问下面的链接获知更多关于Web Farm Framework 2.0发布的相关信息:

  • Microsoft Web Farm Framework介绍
  • 下载Web Farm Framework V2 发布版
  • 阅读Web Farm Framework 2.0文档
  • Web Farm Framework 论坛(由我们的团队关注)

总结

Microsoft Web Farm Framework能简化Web服务器架构的部署——不仅是服务器本身,还有运行在它们上面的Web程序和站点。

Web Farm Framework支持更流畅连贯的部署工作流。增添服务器无需额外的管理负担,便于无缝扩充您的架构。最好的一点是它是免费的,而且在各个版本的windows Server上都可以运行。

希望这些对您有所帮助。

附:除了写博客之外,我现在也用Twitter来即时更新状态和分享链接。请关注我:twitter.com/scottgu

.net 一些基础操作_第8张图片

Posted in 未分类  |  Leave a comment

VS 2010 SP1 和 SQL CE

原文发表地址:VS 2010 SP1 AND SQL CE

原文发表时间:January 11, 2011

上个月我们发布了VS 2010 Service Pack 1 (SP1)Beta . 你可以在Jason Zander的两篇博文和Scott Hanselman包含了VS 2010 SP1 Beta的一些新功能的博文中了解更多关于VS 2010 SP1 Beta的信息。你可以从这里下载和安装VS 2010 SP1 Beta。

上周我发表了关于VS2010 SP1中新增的对 IIS Express的支持的博文。今天的博文中我将要讨论一些支持SQL CE的VS2010 SP1工具支持,并且逐步讲一些它实现的很酷的应用场景。

SQL CE—它是什么?为什么要关注它?

SQL CE是一个免费的,可嵌入的数据库引擎,它使数据库存储变得容易。

不需要数据库安装

SQL CE使你不必运行可执行程序或者安装一个数据库服务器来使用它。你可以简单地把SQL CE文件复制到ASP.NET应用程序的\bin目录中,然后你的web应用程序就能把它当作数据库引擎来用。运行时不需要安装或安全许可。在机器上你不必具有管理员账户。只要把你的web应用程序复制到任何一个服务器上,它就能工作。对运行在虚拟主机环境中的中度信任应用程序也是如此。

SQL CE在ASP.NET应用程序的内存中运行,当你第一次访问一个SQL CE数据库时它会启动,并且当应用程序被卸载后它会自动关闭。SQL CE数据库被作为ASP.NET应用程序中的\App_Data下的文件形式存储。

使用已有的数据API

SQL CE4使用现有的基于.NET的数据API,也支持SQL服务器兼容的查询语法。这意味着你可以使用现有的数据API像ADO.NET,也可以使用高级别的ORM,例如实体框架和配有SQL CE的Nhibernate。这使你可以使用你现在所掌握的同样的数据编程技术和数据API。

支持开发,测试和生产案例

SQL CE可被用在开发案例,测试案例和轻量级的产品使用案例。在SQL CE4版本中我们已经做了一些工程技术工作来确保在多线程服务器场景(比如 ASP.NET)中,SQL CE不会出现故障或死锁。这是针对SQL CE上一个版本的一个大的改动—之前是只为客户场景设计的,这显然阻碍了其在web 服务器环境中的运行。从SQL CE4开始, 你也可以在web服务器中使用它。

SQL CE没有许可证限制,它也是完全免费的

很容易移植到SQL服务器

SQL CE是一个嵌入式数据库—这使得它对开发,测试,和轻量级的使用场景是很理想化的。对于高容量的站点和应用程序,你也许想把数据库迁移至使用SQL Server Express(这是免费的),SQL Server或SQL Azure。这些服务器有更好的可扩展性,更多开发功能(功能如存储过程—SQL CE不支持),也包括更多高级数据管理能力。

我们将发布迁移工具,这可以使你根据需要使用SQL CE数据库,并很容易地把它们升级到使用SQL Server Express,SQL服务器,或SQL Azure。当把一个SQL CE数据库升级到SQL服务器或SQL Azure时,你不必改变代码。我们的目的是使你能够在web.config文件中仅改变数据库连接字符串就能使你的应用程序正好工作。

VS 2010 SP1 中适用于SQL CE新工具支持

VS 2010 SP1包含了改善很多的工具支持SQL CE,并且第一次添加了对ASP.NET工程中SQL CE使用的支持。使用VS 2010 SP1,你现在可以:

· 创建新的SQL CE数据库

· 编辑和修改SQL CE数据库架构和索引

· 用数据填充SQL CE数据库

· 用实体框架(EF)设计器创建与SQL CE数据库匹配的模型层

· 使用实体框架代码优先(EF Code First)定义代码里的模型层,然后从它们里创建一个SQL CE数据库,根据需要用VS编辑数据库。

· 用web部署(Web Deploy)将SQL CE数据库部署到远程服务器,根据需要将它们转换到完整的SQL服务器数据库。

你可以在ASP.NET Web 窗体和基于ASP.NET MVC 的工程中使用上面所有的功能。

下载

通过安装 VS 2010 SP1 (beta)你可以获得VS2010中SQL CE工具支持。

装了SP1 之后,你也需要安装针对 Visual Studio 的SQL CE 工具下载。这是一个单独的下载,它使SQL CE工具支持VS2010SP1 。

演示两个场景

在本篇博客中我将通过一个ASP.NET 窗体和和一个基于ASP.NET MVC的应用程序来演示SQL CE 和VS 2010 SP1的使用 。具体来说或,我们将逐步讲解:

· 怎样使用VS 2010 SP1 创建SQL CE 数据库,然后使用Visual Studio的EF4 可视化设计器来建立一个模型层,然后用ASP.NET GridView控件来显示和编辑数据。

  • 怎样用EF代码优先程序定义一个使用POCO类的模型层,然后使EF代码优先程序基于模型类“自动地创建”一个SQL CE 数据库。我们就看看怎样使用VS 2010 SP1对SQL CE的新支持来查阅已建立的数据库,用数据填充它,在以后改变它的架构。我们会在基于 ASP.NET MVC 的应用程序背景下做这些 .。

通过安装 VS 2010 SP1 (beta),然后安装 适用于Visual Studio下载的SQL CE 工具(这是一个独立的下载,它能使SQL CE工具支持VS 2010 SP1)你可以在你的机器上做下面的两个步骤 。

步骤1:创建一个SQL CE数据库,创建EF模型类,用GridView修改数据

第一个步骤将会演示在一个ASP.NET Web Form 应用程序中怎样创建和定义一个SQL CE数据库。然后我们会为它创建一个EF模型层以通过一个控件来修改数据。

第一步:创建一个新的ASP.NET Web Form程序

在Visual Studio中从文件->新项目菜单命令开始,创建一个新的ASP.NET Web Form工程。我们将用“ASP.NET Web Application”工程模板选项,以使它应用有默认的UI皮肤:

第二步:创建一个SQL CE数据库

在创建的工程中右击“App_Data”文件夹,选择“添加->新的项”菜单命令:

这将会显示“添加项”对话框。选择“SQL Server Compact 4.0 Local Database”项(在VS 2010 SP1中新增的)并将数据库文件命名,创建“Store.sdf”:

注意SQL CE数据库文件有一个.sdf文件扩展名。把他们放到ASP.NET 应用程序的/App_Data文件夹里,使它更容易部署。

当点击上面的“添加”按钮时,一个Store.sdf文件就会被添加到我们的程序中:

第三步: 添加一个“Products” 表

在Server Explorer 选项卡中双击“Store.sdf”数据库文件将会打开它。由于它是一个新的数据库,所以里面没有表格:

在“Tables”图标上右击,选择“Create Table” 菜单命令创建一个新的数据链表格。我们将为它命名为“Products” 并为它添加4列。我们将把第一列标记为主键(并把它作为一个标识列以使它的值会随着每个新的行自动增加) :

当点了“ok”后我们的产品表格会在SQL CE数据库中被创建。

第四步:用数据填充

一旦产品表格创建了,它就会在Server Explorer中显示出来。我们可以右击它,选择“Show Table Data”菜单命令修改它里面的数据:

让我们对它来添加一些数据样本行:

步骤5:创建一个 EF模型层

我们有一个里面含有数据的SQL CE数据库—现在就让我们来创建一个EF模型层来为我们提供一个简单的方法来查询并更新它里面的数据。

在工程上右击,选择“添加->新的项”菜单命令。将会弹出一个“添加新项”对话框—选择里面的“ADO.NET Entity Data Model”选项,并将其命名为“Store.edmx”。

这就会在我们的解决方案资源管理器中添加一个新的Store.edmx项并启动一个允许我们快速地创建一个EF 模型的向导:

选择上面的“Generate From Database”选项并点击下一步。选择刚才创建的Store.sdf SQL CE数据库,然后再次点击下一步。

向导会问你想要导入到模型中的是什么数据库对象。我们就选择导入之前建立的“Products” 表格:

当点击“Finish”按钮,Visual Studio将会打开EF设计器。它上面会出现一个已有的映射到我们的SQLCE数据库中”Product”表的产品实体:

VS 2010 SP1 EF设计器和SQL CE配合工作得相当好,就像它和SQL Server 和 SQL Express工作一样。上面的产品实体会被当作一个类(称为“Product”),我们能在ASP.NET应用程序中编程处理它。

第六步:编译工程

在使用模型层之前你需要创建一个工程。使用Ctrl+Shift+B键来编译程序,或者用Build->Build Solution菜单命令来完成。

第七步:用EF模型层创建一个页面

现在让我们来创建一个包含GridView控件的简单的ASP.NET Web Form,我们可以用它来显示和编辑我们的产品数据(通过我们刚创建的EF模型层)。

右击工程,选择添加->新的项命令。选择“Web Form from Master Page”选项模板,并把你创建的页面命名为“Products.aspx”。把主页建立在项目的根部的“Site.Master”模板上。

添加一个顶端有

Products

的新页面,同时在它里面添加一个控件:

然后点击“Design” 选项卡 转到设计视图。选择GridView空间,然后点击右上角来显示GridView的“智能标记”UI:

选择上面圈出部分的“New data source…”下拉选项。这会产生下面的让你选择你的数据源类型的对话框:

选择“Entity”数据源选项–它会使我们很容易地从我们的GridView连接到我们早先建立的EF模型层。这会产生另一个对话框:

在下拉选项中选择“StoreEntities”–这是我们以前建立的EF模型层。然后点击下一步–这会让我们选择我们想要绑定到的实体:

在上面的对话框中选择“Products”实体–这表明我们我们想要绑定到我们之前定义的“Product”实体类。然后点击“Enable automatic updates”复选框以确保我们可以查询和更新Products。当点击“Finish” VS会显示一个控件:

我们将要做的最后两步是在表格中点击“Enable Editing”复选框(这将会使网格在每行显示出“Edit”连接),并且(有选择性地)使用Auto Format对话框来为网格选择一个UI模板。

第八步:运行程序

现在就让我们来运行下我们的程序,并浏览包含有GridView的/Products.aspx页面。这样做了之后,我们将会在SQL CE数据库中看到Products的一个表格 UI。点击每行的“Edit”链接会使我们看到它们的值:

当点击了“Update”之后,GridView就会返回它们的值,通过EF模型层使它们存留着,最终在SQL CE数据库中保存。

了解更多关于ASP.NET Web Forms中的EF使用

请在http://asp.net网站上阅读这个教程系列了解更多关于怎样用ASP.NET Web Forms使用EF 。

教程中将SQL Express用作数据库–但欣慰的事情是所有相同的步骤/概念现在都可以用SQL CE完成。

演示2: 通过SQL CE和ASP.NET MVC 3使用EF代码优先

上面的案例我们使用了数据库优先的方法–此处我们先创建了数据库,然后用EF设计器从数据库中创建模型类。

除了支持基于设计器开发的数据流,EF也支持更多以代码为中心的选择,我们称之为 “代码优先开发”。代码优先开发形成了一个相当惹人喜欢的开发工作流。它使你可以:

· 通过需简单地编写“普通旧类”来定义你的模型对象,而不需要基类或可视化的设计器。

· 使用“配置约定”方法,从而不用明确地调试任何东西就能使数据库保持一致性

· 根据需要覆盖基于约定的暂留,使用一个流畅的代码API来完全地定制暂留映射

· 基于你定义的模型类根据需要自动创建数据库–允许你先从代码开始

过去我已经发表了几篇关于EF代码优先的博文–我真的觉得它很棒。好消息是它也可以和SQL CE一起很好地使用。

SQL CE, EF 代码优先和支持SQL CE的新VS 工具支持的组合形成了一个相当不错的工作流。下面是一个简单的例子,告诉你怎样使用它们创建一个简单的ASP.NET MVC 3工程。

第一步:创建一个新的ASP.NET MVC 3工程

我们将从Visual Studio中的文件->新项目菜单命令开始创建一个新的ASP.NET MVC 3工程。我们将使用“Internet Project”模板以使它有一个默认的皮肤实现:

第二步:用NuGet安装EFCodeFirst

接下来我们要用NuGet包管理器(ASP.NET MVC 3自动安装的)来把EFCodeFirst库添加到工程中。我们将用包管理器命令窗口来做这个。在Visual Studio中通过选择查看->其他窗口->包管理控制台 菜单命令打开包管理器控制台。然后在包管理器控制台中输入:

install-package EFCodeFirst

来下载EFCodeFirst库,把它添加到工程:

当我们输入了上面的命令,EFCodeFirst库就会被下载下来并添加到我们的应用程序中:

第三步:建立一些模型类

使用一个基于“代码优先”的开发工作流,我们会先创建模型类(甚至在我们创建数据库之前)。我们用写代码的方法来创建这些模型类。

对于这个案例,我们将在工程的“Models”文件夹上右击,向我们的工程添加下面的3个类:

上面的“Dinner” 和 “RSVP”模型类是“普通旧 CLR 对象” (又称为 POCO)。它们不需要由任何基类导出或实现任何接口,并且它们的属性都是标准的.NET数据类型。 它们上面没有添加数据暂留属性或数据代码。

“NerdDinners”类继承自DbContext(由EFCodeFirst提供),它处理从数据库中恢复/暂留Dinner 和RSVP实例。

第四步:Dinner列表

我们已经为这个工程写了对完成模型层所需要的所有代码。

现在让我们公开执行工程中的URL: /Dinners/Upcoming。我们将用它来罗列未来将要发生的Dinner。

我们将通过在“Controllers”文件夹上右击,选择“添加->控件”菜单命令来实现它。我们将指出我们想要的控制器来创建“DinnersController”。然后我们会在它里面实现一个“即将实现的”行为方法,它使用上面的模型层列出了即将到来的Dinner。我们将用一个LINQ查询来恢复数据,把它传递给一个视图,代码如下:

然后在方法上右击,选择“添加-视图”菜单命令来创建一个展示了Dinner的“将要实现的”视图模型。

我们将在“添加视图”对话框中使用“empty”模型选项,并用Razor写出下面的视图模板:

第四步:调试我们的工程以使用SQL CE数据库

我们已经完成了所有代码的编写–下一步将会是编译一个将要使用的数据库连接字符串。

通过把下面的添加到工程的顶部的web.config文件,我们将向SQL CE指出我们的NerdDinners模型类:

EF代码优先使用一个默认的约定,在这协议里上下文类会寻找一个与DbContext类名字匹配的连接字符串。由于之前我们创建了一个“NerdDinners”类,我们也把连接字符串命名为“NerdDinners”。 上面我们调试连接字符串以将SQL CE 用作数据库,并且告知它我们的数据库文件将会存在于ASP.NET工程的\App_Data目录中。

第五步:运行程序

既然我们已经创建了应用程序,那就来运行它吧!

我们将浏览/Dinners/Upcoming URL–这样做会显示一个空的列单:

你也许会问—列表从哪里查询来的?我们并没有明确地创建一个数据库?!?

EF代码优先支持的很酷的功能之一是在我们指出的数据库并不存在时自动地创建数据库的能力(取决于模型类的框架)。上面我们调试了EF代码优化使之在工程的\App_Data\目录下指向一个SQL CE数据库。当我们运行程序时,EF代码优先发现SQL CE数据库并不存在并自动地为我们创建一个。

第六步:使用VS2010 SP1来探究新创建的SQL CE数据库

在解决方案资源管理器中点击“显示所有文件”,你会看到“NerdDinners.sdf” SQL CE数据库文件,它是由\App_Data\文件夹里的EF代码优先为我们自动创建的:

我们可以选择在文件上右击,选“Include in Project"把它添加到我们的解决方案中:

我们也可以双击文件(不管它是否添加到了工程),VS 2010 SP1会把它作为一个我们可以在IDE的“服务资源管理器”内编辑的数据库来打开。当我们通过运行上面的应用程序进入了NerdDinners 类,它就会被EF代码优先执行:

我们可以在表格上右击,使用“Show Table Data”命令来往数据库中输入一些即将发生的Dinner:

我们将使用VS 2010 SP1支持的内置编辑器来填充下面的表格数据:

现在当我们在浏览器里的/Dinners/Upcoming URL上点击“refresh” ,我们就会看到一些将要有的Dinner显示出来:

第七步:更改我们的模型和数据库架构

现在让我们来修改模型层和数据库的架构,并演示一种使得这种做法更简单的新的针对SQLCE的VS 2010 SP1工具支持方法。

使用EF代码优先你可以从修改一个模型类来开始改变数据库。例如,我们添加一个附加的字符串属性“UrlLink”到我们的“Dinner”类。我们可以使用这个指向更多关于时间的链接:

现在当我们再次运行程序,并访问/Dinners/Upcoming URL我们将会看到抛出一个异常:

我们能看到这个错误是因为EF代码优先自动地创建数据库,且在默认情况下创建数据库后会添加一个表格,它帮忙追踪数据库架构是否和我们的模型类同步。当它们不同步时,EF代码优先会抛出一个错误—这使得在开发时期发现问题变得更容易,然而也许你只在运行时才会发现(通过含糊的错误)。注意如果你不想要这个功能,你可以通过改变DbContext类(在NerdDinners类中)默认的约定使它不再追踪schema version,把它关掉。

在上面的例子中我们的模型类和数据库架构是不同步的—我们怎么才能修复呢?现在你可以使用两种方法:

· 删掉数据库,使EF代码优先在一个新的模型类框架(在现有的DB中丢失了数据)的基础上自动地重建数据库

· 修改已有的数据库使它和模型类保持同步(保持/移植DB中现有的数据)

有两种方法可以用来做上面的第二种方法。下面我将演示怎样利用新的针对SQL CE的VS 2010 SP1工具支持来使用数据库架构工具修改我们的数据库结构。将来我们也打算用EF支持“迁移”功能,它将会允许你在程序上自动地/手写数据库架构迁移。

第八步:使用VS 2010 SP1修改我们的SQL CE数据库架构

VS 2010 SP1中的新的SQL CE工具支持使得修改我们已有的SQL CE数据库架构变得更容易。要做到这些,我们可以通过右击“Dinners”表格,选择“编辑表格架构”命令:

这将会产生下面的“编辑表格”对话框。我们可以重命名,修改或删除表格中任意一个已有的列,或在列的列标底部点击,手动添加一个新列。下面我已经添加了一个“nvarchar”类型(由于我们的属性是一个字符串)的“UrlLink”新列:

当点击了“ok”之后,数据库会自动更新产生一个新的列,现在我们的架构就和模型类相匹配了。

由于我们是手动地修改数据库架构的,所以我们要有一个附加的步骤来让EF代码优先知道数据库架构和模型类是同步的。正如我很早之前提过的,当EF代码优先自动地创建一个数据库时,同时也添加了一个“EdmMetadata”表格到数据库来追踪架构版本(把模型类弄乱来阻止它们发现模型类和数据库架构的不匹配):

由于我们是手动地更新和维护我们的数据库架构,我们不需要这个表格—所以可以删掉它:

这样我们仅剩下了下两个和模型类对应的表格:

现在当我们再次运行/Dinners/Upcoming URL,它将会正确地展示Dinner列表:

我们最后要做的一个润色将是更新视图来检查新的UrlLink属性,如果一个事件有UrlLink属性的话为它提供一个链接:

现在当我们刷新/Dinners/Upcoming时,我们将会看到数据库中存储UrlLink的事件有超链接:

总结:

SQL CE提供了一个免费的,嵌入式的数据库引擎,易于你使用数据库存储。有了SQL CE4,你可以在ASP.NET工程和应用程序(Web Forms 和 MVC)中使用它。

VS 2010 SP1提供的工具支持使你可以简单地创建,编辑和修改SQL CE数据库—也可以使用标准的EF设计器。这使你在利用嵌入式的数据库选项的同时重温你已掌握的技术和数据知识。这对小的应用程序(你不需要完全的SQL Server的可扩展性)和开发测试案例—你想不用全局的数据库案例快速地开发/测试你的应用程序。

SQL CE使得后期迁移你的数据到一个完整的SQL Server或SQLAzure实例变得容易——如果你想的话——不用改变应用程序中的任何代码。在上面的两个场景中我们需要改变的只是web.config文件中的值,以使代码在SQL Server上运行。这为从小的嵌入式数据库解决方案基础上扩展的应用程序提供了很大的灵活性。

希望这些对您有所帮助。

Scott

附:除了发表博客,我现在也使用Twitter来快速更新并分享链接。请关注我twitter.com/scottgu

.net 一些基础操作_第9张图片

Posted in 未分类  |  Leave a comment

ASP.NET MVC3: 使用Razor实现服务器端注释

[原文发表地址] ASP.NET MVC 3: Server-Side Comments with Razor

[原文发表时间] November 12, 2010 5:33 PM

本周早期我们发布了ASP.NET MVC3 候选发布版。 它支持“即时”配置,包括一系列基于ASP.Net MVC3 beta和第一个预览版的新改进。

这是详细讨论ASP.NET MVC3 Beta/RC功能的我的“迷你帖子”系列中的另外一篇:

  •  Razor中的新@模型关键字(10月19日)
  •  Razor中的布局(10月22日)
  • 使用Razor实现服务器端注释(今天)

今天的帖子中我将讨论一个我们最近引入的一个小而有用的功能:Razor中的服务器端注释支持。

为何服务器端注释?

场景: 你在处理一个视图模板,希望暂时禁用某些内容或视图代码(可能能帮助你分析一个问题,或者暂时改变你的网站输出)

HTML支持客户端注释(!–>),你能用其阻止浏览器解析、执行、显示里面的HTML内容。但是将这个方法用于很多情形所产生的问题是:注释内的内容还是被从服务器送到了客户端,这是很不必要的——服务器端注释内的代码还是会在服务器端执行。

ASP.NET 表单支持一种服务器端注释语句(<%- -%>),你能使用它来完全禁用页面上的内容、代码、控件。使用服务器端注释,ASP.NET表单编译器在解析的时候完全跳过<%–%>块内的内容,在组装页面的时候完全移除那部分内容。你能在我这里的一篇旧一些的博文上获取更多这个功能的相关信息。

本周早前有人问我:用Razor可以实现同样功能吗?答案是肯定的。

使用Razor实现服务器端注释

Razor现在允许你将视图中的任何代码、内容、区域放入@*注释 *@语句(对C#和VB模板都有用)。这个语句表明Razor解析器必须忽略这个块里的任何内容,就像本就不存在一样(意味着没有东西被执行,在运行时没有性能损耗,没有东西被传到客户端)。

比如, 下面我将一些HTML内容和服务器代码包含于一个@**@块。这等同于它从来就不在那里:

注意上面Visual Studio是如何在编辑器中对注释进行着色(默认是绿色)以使它们更直观的。

Visual Studio现在还让你能使用文本编辑器工具栏上的注释、取消注释按钮很容易地注释、取消注释一段文本、代码。比如,我们现在选择上面文本编辑器中的@**@注释块,然后点工具栏上的“取消注释”按钮(或按Ctrl+K,CTrl+U更好)让VS取消注释那块区域:

我们这样做的时候,编辑器将自动帮我们取消注释那一块(可以少按些键)

我们然后可以在编辑器中选中突出显示另一块区域的文本、代码,然后点“注释”工具栏按钮或按Ctrl+k,ctrl+C实现服务器端注释:

我们这样做的时候,编辑器将自动帮我们注释那一块(可以少按些键)

总结

服务器端注释是一个有用的小功能,在很多情况都可以信手拈来。Razor现在支持运行时注释,Visual Studio提供不错的开发时工具支持。

希望对您有所帮助。

你可能感兴趣的:(文章转载,.net,asp.net,mvc,razor,数据库,sql)