‘ASP.NET MVC’ 分类的存档
[转载]Asp.Net MVC路由调试的好帮手RouteDebugger – Lyon.L – 博客园. RouteDebugger是什么? 在ASP.NET MVC程序中,路由(Route)是一个非常核心的概念,可以说是MVC程序的入口,因为每一个Http请求都要经过路由计算,然后匹配到相应的 Controller和Action。通常我们的路由都会注册在Global.asax.cs文件中的RegisterRoutes方法中,路由会从上往 下依次匹配,因此自定义的(优先级高)的路由需要放在默认(通用)路由的前面。但是,如何确保所有的路由都是正确的,或者是没有重复的 呢?RouteDebugger就是这样一个分析工具。 安装 可以使用NuGet很方便的安装RouteDebugger,在项目上面右键-”Manage NuGet Packages”-”Online”输入”RouteDebugger”然后”Install”,或者在”Package Manager Console”中输入:”Install-Package routedebugger”安装即可。由于NuGet有时会莫名其妙被墙,我上传了一个压缩文件:RouteDebugger 2.1.3 注意:RouteDebugger 2.x版本对应.NET4.0和MVC3,旧版本请参考Phil Haack的ASP.NET Routing Debugger 使用 当你成功安装后,可以看到项目引用了”RouteDebugger”,然后?然后按F5运行程序你就可以看到效果了。是的,你甚至都不需要配置任何 一行代码!这是因为.NET4.0新增的程序集Microsoft.Web.Infrastructure允许动态注册 HttpModule,RouteDebugger将格式化的路由调试信息追加(append)到每一个request里。对于.NET3.5和MVC3 之前的项目,如果要使用RouteDebugger,还需要在Application_Start中注册: ? 1 2 3 4 5 protected void Application_Start(object sender, EventArgs e) { RegisterRoutes(RouteTable.Routes); RouteDebug.RouteDebugger.RewriteRoutesForTesting(RouteTable.Routes); } 从浏览器的输出我们可以看到详细的Route匹配信息,当前请求可以成功匹配哪些路由。 注意:{*catchall}路由是RoutDebugger自动添加的,这样即使没有任何一个路由匹配成功,也会显示相应的路由信息,而不是404(不过我本地测试发现非法url还是返回了404,有人在Phil Haack的博客提出了这个问题但是没有得到回答)。 禁用RouteDebugger 当使用了RouteDebugger后,你会发现每一个页面的后面都会附带路由信息。如果你需要禁用这个功能,打开Web.config: 将RouteDebugger:Enabled后面的value=”false”即可关闭RouteDebugger模式。
[转载][ASP.NET MVC]让Html.RenderAction支持Lamda表达式 – dudu – 博客园. 今天在ASP.NET MVC代码时用到了Html.RenderAction,代码如下: @{Html.RenderAction(“RecentNews”)} 通过字符串指定Action的名称,有两点不爽: 1. 输入时不能智能感知; 2. 输错了不能实时提示。 有这两点不爽,写代码的乐趣就大减。有享受感觉的代码应该是这样的: @{Html.RenderAction<AggSiteController>(c => c.RecentNews());} 是的,Lamda,给你写代码带来畅快感觉的Lamda! 微软不让我们享受,我们就自己动手,丰衣足食。自己写一个支持Lamda表达式的Html.RenderAction,代码如下: using System.Web.MVC; using System.Web.Mvc.Html; using System.Linq.Expressions; namespace System.Web.Mvc.Html { public static class HtmlHelperExtensions { public static void RenderAction(this HtmlHelper htmlHelper, Expression> operation) where TController : Controller { var actionName = ((MethodCallExpression)operation.Body).Method.Name; htmlHelper.RenderAction(actionName); } } } [...]
[转载]通过ASP.NET Web API + JQuery创建一个简单的Web应用 – Artech – 博客园. 看了dudu的《HttpClient + ASP.NET Web API, WCF之外的另一个选择》一文,想起多很久之前体现ASP.NET Web API而创建的一个Demo。这是一个只涉及到简单CRUD操作的Web应用,业务逻辑以Web API的形式定义并以服务的形式发布出来,前台通过JQuery处理用户交互并调用后台服务。[源代码从这里下载] 目录 一、一个简单的基于CRUD 二、通过ASP.NET Web API提供服务 三、通过JQuery消费服务 一、一个简单的基于CRUD的Web应用 这个简单的Demo应用用于模拟“联系人管理”。当页面加载的时候,所有的联系人列表被列出来。在同一个页面中,我们可以添加一个新的联系人,也可以修改和删除现有联系人信息。整个应用唯一的页面在浏览器中的呈现效果如下图所示。 二、通过ASP.NET Web API提供服务 我们来简单介绍作为Web API形式发布的联系人管理服务的定义,先来看看用于表示联系人的Contact类型的定义。 1: public class Contact 2: { 3: public string Id { get; set; } 4: public string FirstName { get; set; } 5: public [...]
[转载]ASP.NET MVC三个重要的描述对象:ControllerDescriptor – Artech – 博客园. ASP.NET MVC应用的请求都是针对某个Controller的某个Action方法,所以对请求的处理最终体现在对目标Action方法的执行。而Action方 法具有相应的参数,所以在方法执行之前必须根据相应的规则从请求中提取相应的数据并将其转换为Action方法参数列表,我们将这个过程称为Model绑 定。在ASP.NET MVC应用编程接口中,Action方法某个参数的元数据通过ParameterDescriptor表示,而两个相关的类型ControllerDescriptor和ActionDescriptor则用于描述Controller和Action方法。[本文已经同步到《How ASP.NET MVC Works?》中] 一、ControllerDescriptor ControllerDescriptor 包含了用于描述某个Controller的元数据信息。如下面的代码片断所示,ControllerDescriptor具有三个属性,其中 ControllerName和ControllerType分别表示Controller的名称和类型,前者来源于路由信息;字符串类型的 UniqueId表示ControllerDescriptor的唯一标识,该标识由自身的类型、Controller的类型以及Controller的名称三者派生。 1: public abstract class ControllerDescriptor : ICustomAttributeProvider 2: { 3: public virtual object[] GetCustomAttributes(bool inherit); 4: public virtual object[] GetCustomAttributes(Type attributeType, bool inherit); 5: public virtual bool IsDefined(Type attributeType, bool inherit); 6: public virtual IEnumerableGetFilterAttributes(bool useCache); [...]
[转载]ASP.NET MVC Razor视图引擎攻略 – 菊花台泡茶 – 博客园. 一,创建基于Razor的Web程序 首先你的开发环境必须安装.NET Framework4.0,然后在VS中新建项目时选择ASP.NET MVC 3 应用程序,在选项页面中选择视图引擎为Razor,如图1: 图1 然后创建项目,就会得到一个基于Razor的Web项目了,如图2。 图2 相信熟悉MVC的看官们对此结构并不陌生。注意红框部份,Razor的页面是以cshtml为后缀的,下面我们来讲下如何使用Razor来进行页面布局。 二,使用Razor来进行页面布局 UI设计师们现在也讲究页面设计的语义化和结构化,把一个页面分成很多个模块,使用语义化的类名或id来标识这些模块。Razor推出了新的布局解决方案来迎合这一潮流。 这里涉及到Razor的一些语法,大家可以不深究“@”后面的内容,讲到页面布局,你只要专注与HTML代码就可以了。语法会在后面补充。 1.指定母版与加载机制 首先我们来看_ViewStart.chhtml页面,它的内容很简单: @{ Layout = “~/Views/Shared/_Layout.cshtml”; } 这句代码指定了默认的母版的位置: 当前应用程序根目录下<”~”的含义>的Views/Shared/_Layout.cshtml 除非特殊情况,比如视图是Partial视图,或显示的在视图中添加以下代码指示不使用母版: @{ Layout = null; } 其他情况下,该指定页就是视图的母版页。 然后我们来看看Razor母版页_Layout.cshtml的内容: View Code @ViewBag.Title <script type="text/JavaScript" src="@Url.Content("></script> <div class="page"> <div id="header"> <div id="title"> <h1>我的 MVC 应用程序</h1> [...]


