a

ABLY مقالات و مطالب مجموعه

T4MVC

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); %>

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

 معرفی 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>

 

 

نظرات

  • Hannah Martinez
    neda
    دو شنبه 11 دی 1278 0:00

    متشکرم

    مشکل من اینجاست که من نام یک اکشن را در کنترلر تغییر می دهم و انتظار دارم  actionlink ایی که به همین اکشن اشاره داشت به طور اتوماتیک تغییر کند.
    اما این اتفاق نمی افتد و من باید به صورت دستی در view نام آن actionlink  را تغییر دهم. با این که بر روی Run Custom Tool  نیز کلیک می کنم.
    آیا درک من از T4MVC صحیح است ؟ این اتفاق باید به صورت خودکار رخ دهد . درست است ؟

    • Judith Bell
      پاسخ
      حسینبهزادی
      دو شنبه 11 دی 1278 0:00

      با سلام
      نه دقیقا T4MVC باید تغییر نام و اطلاعات را برای شما به صورت خودکار انجام دهد.
      موفق باشید.

  • Hannah Martinez
    neda
    دو شنبه 11 دی 1278 0:00

    سلام

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

    • Judith Bell
      پاسخ
      حسینبهزادی
      دو شنبه 11 دی 1278 0:00

      با عرض سلام

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

  • Hannah Martinez
    یه برنامه نویس
    دو شنبه 11 دی 1278 0:00

    سلام این مشکل که مطرح کردن به احتمال زیاد از RazorGenerator هست نه T4MVC

نظرات یا سوالات خودرا با ما درمیان بگذارید

0912 097 5516 :Phone Number
0713 625 1757 :Phone Number