ably ably برای هدایت شدن به سایت جدید اینجا کلیک کنید

آموزش برنامه نویسی

آموزش برنامه نویسی وب، اندروید، ویندوز , اسکیوال و...
Tell: 0912 097 5516
| Email: Hello@EduOnline.ir

T4MVC

بسم الله الرحمن الرحیم

 معرفی T4MVC

T4MVC می تواند بر روی نسخه های Visual Studio 2010, 2012  و  2013نصب شود وASP.NET MVC 4.0  و  5.0این Package را پشتیبانی می کنند، شاید بتوانید بر روی سایر نسخه ها از این Package استفاده کنید اما این Package فقط بر روی گزینه های گفته شده تست شده است.

 

نصب T4MVC

برای نصب این Package کافی است که دستور زیر را از طریق Package Manager Console اجرا کنید

Install-Package T4MVC

پس از اجرای این دستور دو فایل به پروژه شما اضافه می شود.

هدف T4MVC

این Package برای جلوگیری از نوشتن اسامی کنترلر ها و اکشن ها و در نهایت view ها به صورت Hard Code مورد استفاده قرار می گیرد.

برای مثال کدزیر را در نظر بگیرید:

<% Html.RenderPartial("DinnerForm"); %>

 

ما از عبارت های رشته ای برای فراخوانی این Partial استفاده کرده ایم، اگر فردا شما بخواهید این نام را تغییر دهید باید در بهترین و سریعترین روش ممکن با استفاده از Finde ویژوال استادیو تمامی نام های مربوطه را تغییر دهید.

اما چرا از ابتدا از روش دیگری استفاده نکنیم!

T4MVC در واقع نام تمامی View,Conreoller,Action ها را به صورت خودکار در خود ذخیره می کند و عملا یک Enumeration  برای شما به وجود می آورد تا در آینده در صورتی که نامی را برای یک View,Conreoller,Action عوض کردید، این نام در تمامی پروژه عوض شود.

مثال:

<% Html.RenderPartial("DinnerForm"); %>

از این به بعد ما نام ها را به صورت زیر خواهیم نوشت:

 

<% Html.RenderPartial(MVC.Dinners.Views.DinnerForm); %>

مثال:

return View("InvalidOwner");

کد ما با استفاده از T4MVC به صورت زیر خواهد بود:

return View(Views.InvalidOwner);

مثال:

return View("Index");

 کد ما با استفاده از T4MVC به صورت زیر خواهد بود:

return View(Views.ViewNames.Index);

Adding additional route parameters

 <%= Html.ActionLink("Delete Dinner", "Delete", "Dinners", new { id = Model.DinnerID }, null)%>

در کد بالا ما نام اکشن و کنترلر را به صورت رشته ای و همان روش Hard Code نوشته ایم، اما با استفاده از T4MVC می توانیم این کار را به صورت زیر انجام دهیم:

<%= Html.ActionLink("Delete Dinner", MVC.Dinners.Delete(Model.DinnerID))%>

Adding additional route parameters

ممکن است شما بخواهید اطلاعات بیشتری را برای اکشن خود ارسال کنید، برای این کار می توانید به صورت زیر اقدام کنید

Html.ActionLink("Delete Dinner", MVC.Dinners.Delete(Model.DinnerID)
    .AddRouteValue("foo", 17))

اگر بخواهید چندین مقدار را ارسال کنید، می توانید به صورت زیر اقدام کنید:

Html.ActionLink("Delete Dinner", MVC.Dinners.Delete(Model.DinnerID)
    .AddRouteValue("foo", 17)
    .AddRouteValue("bar", "abc"))

می توانید از این روش نیز استفاده کنید

Html.ActionLink("Delete Dinner", MVC.Dinners.Delete(Model.DinnerID)
    .AddRouteValues(new { foo = 17, bar = "abc"}))

فراخوانی تابع با دریافت مقدار به وسیله QueryString

RedirectToAction(MVC.Home.MyAction().AddRouteValues(Request.QueryString));

Url.Action

<%= Url.Action(MVC.Dinners.Delete(Model.DinnerID))%>

Url.JavaScriptReplacableUrl

<%= Url.Action(MVC.Dinners.Display(Model.DinnerID))%>

اگر بخواهید مقدار DinnerID را از طریق جاوا اسکریپت دریافت کنید می توانید به روش زیر عمل کنید

 

var myUrl=<%= Url.Action(MVC.Dinners.Display())%>

//myUrl will be  /Dinners/Display
var myFinalUrl=myUrl+"/"+dinnerId;   ///Dinners/Display/12
//or does it look like
var myFinalUrl=myUrl+"?dinnerID"+dinnerId;  ///Dinners/Display?dinnerId=12

Ajax.ActionLink

<%= Ajax.ActionLink( "RSVP for this event",
                     "Register", "RSVP",
                     new { id=Model.DinnerID },
                     new AjaxOptions { UpdateTargetId="rsvpmsg", OnSuccess="AnimateRSVPMessage" }) %>

با استفاده از T4MVC می توان به صورت زیر نوشت

<%= Ajax.ActionLink( "RSVP for this event",
                     MVC.RSVP.Register(Model.DinnerID),
                     new AjaxOptions { UpdateTargetId="rsvpmsg", OnSuccess="AnimateRSVPMessage" }) %>

RedirectToAction (in controller code)

return RedirectToAction("Details", new { id = dinner.DinnerID });

با استفاده از T4MVC می توان به صورت زیر نوشت

return RedirectToAction(MVC.Dinners.Details(dinner.DinnerID));

routes.MapRoute (typically in global.asax)

routes.MapRoute(
    "UpcomingDinners",
   "Dinners/Page/{page}",
    new { controller = "Dinners", action = "Index" }
);

با استفاده از T4MVC می توان به صورت زیر نوشت

routes.MapRoute(
    "UpcomingDinners",
    "Dinners/Page/{page}",
    MVC.Dinners.Index(null)
);

 Html.BeginForm

using (Html.BeginForm(MVC.Account.LogOn(), FormMethod.Post)) { ... }

Html.RenderAction and Html.Action (only in MVC 2 or newer)

<%= Html.Action("Menu", new { options = new MenuOptions { Width=400, Height=500} })%>

با استفاده از T4MVC می توان به صورت زیر نوشت

 

<%= Html.Action(MVC.Home.Menu(new MenuOptions { Width=400, Height=500})); %>

Area name constants

MVC.CoolArea.Name

Controller name constants

MVC.Home.Name

Action name constants

MVC.Home.ActionNames.Index

Parameter name constants

MVC.Home.MyActionParams.foo

Strongly typed links to script files and static resources  (لینک به فایل ها و اسکریپت ها)

 <img src="/Content/nerd.jpg" />

با استفاده از T4MVC می توان به صورت زیر نوشت

<img src="<%= Links.Content.nerd_jpg %>" />

ُScript

<script src="/Scripts/Map.js" type="text/javascript"></script>

با استفاده از T4MVC می توان به صورت زیر نوشت

 <script src="<%= Links.Scripts.Map_js %>" type="text/javascript"></script>

 

 

نظرات (۲)

سلام
ممنون از سایت خوبتون
یه سوال داشتم اگه راهنمایی کنید ممنون میشم
دنبال روشی هستم که با تغییر نام اکشن یا کنترلر در پروژه ، این تغییرات به تمام پروژه اعمال شود
میدونم که T4MVC خیلی از معایب روش ساده ساخت لینک با استفاده از "" را نداره ولی در این مورد هم کمکی نمیکنه جز خطا 
موردی هست که برای برطرف کردن این مورد پیشنهاد کنید؟
پاسخ:
با عرض سلام

چرا T4MVC در این وضعیت به شما کمک نمی کند؟
T4MVC دقیقا مشابه یک enum عمل می کند، وقتی شما یک عضو این enum را تغییر می دهید (مثلا نام یک Action)، در تمامی مواردی که از این enum استفاده کرده اید این تغییر به روز خواهد شد.
اگر منظور شما درست متوجه نشده ام، لطفا بیشتر توضیح دهید.

متشکرم
مشکل من اینجاست که من نام یک اکشن را در کنترلر تغییر می دهم و انتظار دارم  actionlink ایی که به همین اکشن اشاره داشت به طور اتوماتیک تغییر کند.
اما این اتفاق نمی افتد و من باید به صورت دستی در view نام آن actionlink  را تغییر دهم. با این که بر روی Run Custom Tool  نیز کلیک می کنم.
آیا درک من از T4MVC صحیح است ؟ این اتفاق باید به صورت خودکار رخ دهد . درست است ؟
پاسخ:
با سلام
نه دقیقا T4MVC باید تغییر نام و اطلاعات را برای شما به صورت خودکار انجام دهد.
موفق باشید.
ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی
up
ما را در گوگل محبوب کنید