{"id":158,"date":"2017-09-27T16:24:02","date_gmt":"2017-09-27T16:24:02","guid":{"rendered":"http:\/\/td_uid_78_59cbd0a2be218"},"modified":"2023-03-07T12:59:08","modified_gmt":"2023-03-07T05:59:08","slug":"t4mvc","status":"publish","type":"post","link":"https:\/\/thietkewebdalat.net\/blog\/t4mvc\/","title":{"rendered":"T4MVC l\u00e0 g\u00ec"},"content":{"rendered":"<div class=\"td-paragraph-padding-1\">\n<p>T4MVC l\u00e0 m\u1ed9t c\u00f4ng c\u1ee5 m\u00e3 ngu\u1ed3n m\u1edf cho .NET Framework v\u00e0 ASP.NET MVC, \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 t\u1ea1o ra m\u00e3 t\u1eadp tin c\u1ee5c b\u1ed9 t\u1eeb c\u00e1c \u0111\u01b0\u1eddng d\u1eabn v\u00e0 c\u00e1c ph\u01b0\u01a1ng th\u1ee9c \u0111\u1ecbnh tuy\u1ebfn trong \u1ee9ng d\u1ee5ng MVC. T4MVC \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 t\u1ea1o ra m\u00e3 trong c\u00e1c t\u1ec7p c# t\u1eeb c\u00e1c \u0111\u01b0\u1eddng d\u1eabn v\u00e0 ph\u01b0\u01a1ng th\u1ee9c \u0111\u1ecbnh tuy\u1ebfn trong c\u00e1c t\u1ec7p MVC. M\u00e3 n\u00e0y c\u00f3 th\u1ec3 gi\u00fap cho vi\u1ec7c qu\u1ea3n l\u00fd t\u1eadp tin v\u00e0 c\u00e1c ph\u01b0\u01a1ng th\u1ee9c \u0111\u1ecbnh tuy\u1ebfn trong \u1ee9ng d\u1ee5ng d\u1ec5 d\u00e0ng h\u01a1n, gi\u1ea3m s\u1ef1 l\u1ed7i v\u00e0 t\u0103ng t\u00ednh linh ho\u1ea1t c\u1ee7a m\u00e3.<\/p>\n<h2>C\u00e1c t\u00ednh n\u0103ng ch\u00ednh c\u1ee7a T4MVC bao g\u1ed3m:<\/h2>\n<ol>\n<li>Cung c\u1ea5p m\u1ed9t API chung cho t\u1ea5t c\u1ea3 c\u00e1c \u0111\u01b0\u1eddng d\u1eabn v\u00e0 ph\u01b0\u01a1ng th\u1ee9c \u0111\u1ecbnh tuy\u1ebfn trong \u1ee9ng d\u1ee5ng c\u1ee7a b\u1ea1n.<\/li>\n<li>T\u1ea1o ra m\u00e3 \u1edf th\u1eddi \u0111i\u1ec3m bi\u00ean d\u1ecbch, gi\u00fap gi\u1ea3m thi\u1ec3u l\u1ed7i t\u1ea1i th\u1eddi \u0111i\u1ec3m ch\u1ea1y.<\/li>\n<li>Gi\u1ea3m thi\u1ec3u s\u1ef1 ph\u1ee5 thu\u1ed9c v\u00e0o chu\u1ed7i c\u1ee7a c\u00e1c \u0111\u01b0\u1eddng d\u1eabn.<\/li>\n<li>H\u1ed7 tr\u1ee3 IntelliSense cho t\u1ea5t c\u1ea3 c\u00e1c \u0111\u01b0\u1eddng d\u1eabn v\u00e0 ph\u01b0\u01a1ng th\u1ee9c \u0111\u1ecbnh tuy\u1ebfn trong \u1ee9ng d\u1ee5ng c\u1ee7a b\u1ea1n.<\/li>\n<\/ol>\n<h2>C\u00e1ch c\u00e0i \u0111\u1eb7t T4MVC:<\/h2>\n<ul>\n<li>B\u1ea1n c\u00e0i \u0111\u1eb7t n\u00f3 th\u00f4ng qua NuGet theo l\u1ec7nh sau:\n<ul>\n<li>Install-Package T4MVCExtensions<\/li>\n<\/ul>\n<\/li>\n<li>Sau khi b\u1ea1n c\u00e0i \u0111\u1eb7t xong n\u00f3 s\u1ebd t\u1ef1 \u0111\u1ed9ng t\u1ea1o ra T4MVC.tt<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-374\" src=\"https:\/\/thietkewebdalat.net\/blog\/wp-content\/uploads\/2017\/09\/Untitled-1.png\" alt=\"t4mvc\" width=\"334\" height=\"336\" srcset=\"https:\/\/thietkewebdalat.net\/blog\/wp-content\/uploads\/2017\/09\/Untitled-1.png 334w, https:\/\/thietkewebdalat.net\/blog\/wp-content\/uploads\/2017\/09\/Untitled-1-298x300.png 298w, https:\/\/thietkewebdalat.net\/blog\/wp-content\/uploads\/2017\/09\/Untitled-1-150x150.png 150w\" sizes=\"auto, (max-width: 334px) 100vw, 334px\" \/><\/p>\n<h2>C\u00e1ch s\u1eed d\u1ee5ng T4MVC:<\/h2>\n<ul>\n<li>C\u00e1ch 1:\n<ul>\n<li>B\u1ea1n c\u00f3 th\u1ec3 ch\u1ecdn chu\u1ed9t ph\u1ea3i v\u00e0o\u00a0file T4MVC.tt, ch\u1ecdn Run Custom Tool ho\u1eb7c Build \u0111\u1ec3 t\u1ea1o ra c\u00e1c file T4MVC.Generated.cs v\u00e0 T4MVC.cs<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-375\" src=\"https:\/\/thietkewebdalat.net\/blog\/wp-content\/uploads\/2017\/09\/Untitled-2.png\" alt=\"ch\u1ea1y t4mvc\" width=\"385\" height=\"342\" srcset=\"https:\/\/thietkewebdalat.net\/blog\/wp-content\/uploads\/2017\/09\/Untitled-2.png 385w, https:\/\/thietkewebdalat.net\/blog\/wp-content\/uploads\/2017\/09\/Untitled-2-300x266.png 300w\" sizes=\"auto, (max-width: 385px) 100vw, 385px\" \/><\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li>B\u00e2y gi\u1edd, b\u1ea1n c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng T4MVC \u0111\u1ec3 thay th\u1ebf c\u00e1c chu\u1ed7i t\u0129nh ki\u1ec3u c\u0169.<\/li>\n<li>V\u00ed d\u1ee5:<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<pre><span class=\"hljs-comment\">\/\/ Tr\u01b0\u1edbc khi s\u1eed d\u1ee5ng T4MVC<\/span> \r\n<span class=\"hljs-type\">string<\/span> <span class=\"hljs-variable\">url<\/span> <span class=\"hljs-operator\">=<\/span> Url.Action(<span class=\"hljs-string\">\"Index\"<\/span>, <span class=\"hljs-string\">\"Home\"<\/span>);\r\n\/\/Sau khi s\u1eed d\u1ee5ng T4MVC \r\n<span class=\"hljs-type\">string<\/span> <span class=\"hljs-variable\">url<\/span> <span class=\"hljs-operator\">=<\/span> Url.Action(MVC.Home.Index());<\/pre>\n<\/div>\n<div class=\"td-paragraph-padding-1\">\n<ul>\n<li>C\u00e1ch 2: b\u1ea1n c\u00f3 th\u1ec3 c\u00e0i AutoT4MVC, n\u00f3 s\u1ebd gi\u00fap b\u1ea1n t\u1ef1 \u0111\u1ed9ng ch\u1ea1y T4MVC cho b\u1ea1n. B\u1ea1n c\u00f3 th\u1ec3 truy c\u1eadp v\u00e0o <a href=\"http:\/\/bennor.github.io\/AutoT4MVC\/\" target=\"_blank\" rel=\"noopener\">\u0111\u00e2y<\/a> \u0111\u1ec3 t\u1ea3i v\u1ec1 v\u00e0 c\u00e0i \u0111\u1eb7t n\u00f3 cho visual studio c\u1ee7a b\u1ea1n.<\/li>\n<\/ul>\n<\/div>\n<p>T4MVC s\u1ebd gi\u00fap cho vi\u1ec7c ph\u00e1t tri\u1ec3n \u1ee9ng d\u1ee5ng ASP.NET MVC c\u1ee7a b\u1ea1n tr\u1edf n\u00ean thu\u1eadn ti\u1ec7n h\u01a1n v\u00e0 tr\u00e1nh \u0111\u01b0\u1ee3c m\u1ed9t s\u1ed1 l\u1ed7i do s\u1eed d\u1ee5ng chu\u1ed7i t\u0129nh ki\u1ec3u c\u0169. Ngo\u00e0i ra, T4MVC c\u00f2n gi\u00fap cho m\u00e3 c\u1ee7a b\u1ea1n tr\u1edf n\u00ean s\u1ea1ch h\u01a1n v\u00e0 d\u1ec5 \u0111\u1ecdc h\u01a1n.<\/p>\n<p>T4MVC l\u00e0 m\u1ed9t c\u00f4ng c\u1ee5 h\u1eefu \u00edch trong ph\u00e1t tri\u1ec3n \u1ee9ng d\u1ee5ng ASP.NET MVC. N\u00f3 gi\u00fap gi\u1ea3m thi\u1ec3u c\u00e1c l\u1ed7i t\u1ea1i th\u1eddi \u0111i\u1ec3m bi\u00ean d\u1ecbch, t\u0103ng t\u00ednh linh ho\u1ea1t c\u1ee7a m\u00e3 v\u00e0 gi\u00fap cho vi\u1ec7c t\u1ea1o m\u00e3 d\u1ec5 d\u00e0ng h\u01a1n. Ch\u00fang ta c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng T4MVC \u0111\u1ec3 t\u1ea1o ra m\u00e3 cho c\u00e1c \u0111\u01b0\u1eddng d\u1eabn v\u00e0 ph\u01b0\u01a1ng th\u1ee9c \u0111\u1ecbnh tuy\u1ebfn trong \u1ee9ng d\u1ee5ng c\u1ee7a m\u00ecnh, gi\u00fap cho vi\u1ec7c qu\u1ea3n l\u00fd c\u00e1c t\u1eadp tin v\u00e0 c\u00e1c ph\u01b0\u01a1ng th\u1ee9c \u0111\u1ecbnh tuy\u1ebfn trong \u1ee9ng d\u1ee5ng d\u1ec5 d\u00e0ng h\u01a1n. T4MVC c\u0169ng cung c\u1ea5p IntelliSense cho c\u00e1c \u0111\u01b0\u1eddng d\u1eabn v\u00e0 ph\u01b0\u01a1ng th\u1ee9c \u0111\u1ecbnh tuy\u1ebfn trong \u1ee9ng d\u1ee5ng c\u1ee7a b\u1ea1n, gi\u00fap cho vi\u1ec7c t\u1ea1o m\u00e3 nhanh ch\u00f3ng v\u00e0 d\u1ec5 d\u00e0ng h\u01a1n.<\/p>\n<p>Ngo\u00e0i ra, b\u1ea1n c\u0169ng c\u00f3 th\u1ec3 t\u00ecm th\u1ea5y c\u00e1c t\u00e0i li\u1ec7u v\u00e0 v\u00ed d\u1ee5 minh h\u1ecda kh\u00e1c v\u1ec1 c\u00e1ch s\u1eed d\u1ee5ng T4MVC trong ASP.NET MVC tr\u00ean trang web ch\u00ednh th\u1ee9c c\u1ee7a d\u1ef1 \u00e1n T4MVC tr\u00ean Github ho\u1eb7c c\u00e1c ngu\u1ed3n t\u00e0i li\u1ec7u kh\u00e1c.<\/p>\n<p>B\u1ea1n c\u00f3 th\u1ec3 truy c\u1eadp <a href=\"https:\/\/github.com\/T4MVC\/T4MVC\" target=\"_blank\" rel=\"noopener\">v\u00e0o \u0111\u00e2y<\/a> \u0111\u1ec3 bi\u1ebft th\u00eam nhi\u1ec1u chi ti\u1ebft h\u01a1n, c\u0169ng nh\u01b0 c\u00e1ch s\u1eed d\u1ee5ng c\u1ee7a n\u00f3 m\u1ed9t c\u00e1ch t\u1ed1t nh\u1eadt.<\/p>\n<p>C\u1ea3m \u01a1n b\u1ea1n \u0111\u00e3 \u0111\u1ecdc b\u00e0i, n\u1ebfu c\u00f3 b\u1ea5t k\u1ef3 c\u00e2u h\u1ecfi n\u00e0o xin h\u00e3y b\u00ecnh lu\u1eadn ph\u00eda d\u01b0\u1edbi \u0111\u1ec3 \u0111\u01b0\u1ee3c h\u1ed7 tr\u1ee3<\/p>\n","protected":false},"excerpt":{"rendered":"<p>T4MVC l\u00e0 m\u1ed9t c\u00f4ng c\u1ee5 m\u00e3 ngu\u1ed3n m\u1edf cho .NET Framework v\u00e0 ASP.NET MVC, \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 t\u1ea1o ra m\u00e3 t\u1eadp tin c\u1ee5c b\u1ed9 t\u1eeb c\u00e1c \u0111\u01b0\u1eddng d\u1eabn v\u00e0 c\u00e1c ph\u01b0\u01a1ng th\u1ee9c \u0111\u1ecbnh tuy\u1ebfn trong \u1ee9ng d\u1ee5ng MVC. T4MVC \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 t\u1ea1o ra m\u00e3 trong c\u00e1c t\u1ec7p c# t\u1eeb c\u00e1c \u0111\u01b0\u1eddng d\u1eabn [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":376,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"amp_status":"","footnotes":""},"categories":[8,10],"tags":[],"class_list":{"0":"post-158","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-net","8":"category-mvc"},"_links":{"self":[{"href":"https:\/\/thietkewebdalat.net\/blog\/wp-json\/wp\/v2\/posts\/158","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thietkewebdalat.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thietkewebdalat.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thietkewebdalat.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/thietkewebdalat.net\/blog\/wp-json\/wp\/v2\/comments?post=158"}],"version-history":[{"count":3,"href":"https:\/\/thietkewebdalat.net\/blog\/wp-json\/wp\/v2\/posts\/158\/revisions"}],"predecessor-version":[{"id":373,"href":"https:\/\/thietkewebdalat.net\/blog\/wp-json\/wp\/v2\/posts\/158\/revisions\/373"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thietkewebdalat.net\/blog\/wp-json\/wp\/v2\/media\/376"}],"wp:attachment":[{"href":"https:\/\/thietkewebdalat.net\/blog\/wp-json\/wp\/v2\/media?parent=158"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thietkewebdalat.net\/blog\/wp-json\/wp\/v2\/categories?post=158"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thietkewebdalat.net\/blog\/wp-json\/wp\/v2\/tags?post=158"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}