什么是T4MVC?
T4(Text Template Transformation Toolkit)是Visual Studio自带的一款代码生成器,允许我们使用类似ASPX引擎的语法来自定义要生成的代码或文本。
T4MVC是开源项目MvcContrib库的一小部分,MvcContrib库包含了ASP.NET MVC开发领域的各种工具,这些工具的提供了非常强大和完善的功能,需要你在日常开发中逐一去发现。T4MVC是ASP.NET MVC应用程序的一个T4模板,用于简化创建控制器(Controller)、行为(Action)和视图(View)的操作,使得MVC的代码可维护性更好。
在ASP.NET MVC项目中,经常会遇到类似于RedirectToAction("Index", "Home")或@Action("Index", "Home")这样的代码,这种将字符串直接写死在代码中的方法感觉十分枯燥,其缺点也是显而易见的:
- 拼写麻烦,如果遇到比较长的Controller(或Action、View)的名字,出现拼写错误的概率也会大大提高;而这种错误也不易于发现,因为它只有在运行到这句代码的时候才会提示错误;
- 不具有智能提示功能(Intelligence),智能提示功能已经是衡量一款IDE好坏的重要标志,使用T4MVC,在写这些字符串的时候可以使用智能提示大大的提高了编写代码的效率;
- 在代码调整或修改的情况下(Controller、Action、View重命名时),和第一种情况类似,也是会在运行的时候才出错,而使用T4MVC,在编译的时候就能看到错误信息;
如何使用T4MVC?
T4MVC就是一个T4模板,会根据你的工程自动生成需要的文件;使用NuGet可以方便的获取T4MVC,下载完成后可以在工程中发现T4MVC.tt文件,点击T4MVC.tt文件左侧的展开按钮,可以看到所有自动生成的代码,这些生成代码就是用来完成T4MVC后续的工作的。
T4MVC使用实例
1. Html.Partial()
@Html.Partial("_LogOnPartial") ==> @Html.Partial(MVC.Shared.Views._LogOnPartial)
2. Url.Action()
@Url.Action("Home", "Index") ==> @Url.Action(MVC.Home.Index()) @Url.Action("Home", "Index", new { id = Model.Id }) ==> @Url.Action(MVC.Home.Index(Model.Id))
3. Html.ActionLink()
@Html.ActionLink("Home", "Index", "Home") ==> @Html.ActionLink("Home", MVC.Home.Index()) @Html.ActionLink("Home", "Index", "Home", new { id = Model.Id }) ==> @Html.ActionLink("Home", MVC.Home.Index(Model.Id))
4. Ajax.ActionLink()
@Ajax.ActionLink("Home", "Index", "Home", new { id = Model.Id }, new AjaxOptions { HttpMethod = "POST" }) ==> @Ajax.ActionLink("Home", MVC.Home.Index(Model.Id), new AjaxOptions { HttpMethod = "POST" })
5. return View()
return View("About"); ==> return View(Views.About);
6. return RedirectToAction()
return RedirectToAction("About"); ==> return RedirectToAction(MVC.Home.About());
7. routes.MapRoute()
routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index" }); ==> routes.MapRoute("Default", "{controller}/{action}/{id}", MVC.Home.Index(null));
8. Html.BeginForm()/Ajax.BeginForm()
@Html.BeginForm("Index", "Home", new { id = Model.Id }, FormMethod.Post) ==> @Html.BeginForm(MVC.Home.Index(Model.Id), FormMethod.Post)
Scripts & Contents
T4MVC还支持对诸如javascript、css、images这类静态资源的位置,如下:
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> ==> <script src="@Links.Scripts.jquery_validate_js" type="text/javascript"></script>
<img src="/Content/install/images/bg.gif" /> ==> <img src="@Links.Content.install.images.bg_gif">
使用这种方式来编写静态文件的路径的好处是当这些文件重命名或被移除时,能够在编译时第一时间发现错误。另一个好处就是提供了对Minified Javascript的支持,Minified Javascript是使用一些不影响原有Javascript文件功能而尽可能将文件大小压缩到最小的方法(譬如将所有的tab和空格删除、将函数名重命名为简短的字符等),这样做可以提高下载速度,改善用户体验。在MVC工程的Scripts目录下,你可以找到jquery-1.5.1.js和jquery-1.5.1.min.js两个文件,后缀为min.js的文件即为Minified Javascript。在开发过程中,因为需要开发人员方便的对javascript代码进行调试,网站需要原javascript文件,而在发布后的网站上应该使用Minified javascript。
T4MVC会自动判断程序运行环境,如果是开发环境则会加载原javascript,如果是发布环境则会加载Minified javascript,你只需这样编写代码:
<script src="@Links.Scripts.jquery_validate_js" type="text/javascript"></script>
T4MVC根据下面的代码来判断当前的开发环境,如果你需要使用不同的判断方法可以在T4MVC.tt.settings.t4文件中修改这段代码:
// Logic to determine if the app is running in production or dev environment public static bool IsProduction() { return (HttpContext.Current != null && !HttpContext.Current.IsDebuggingEnabled); }
参考资料:http://t4mvc.codeplex.com/documentation