اضافه کردن action به کنترلرساز mvc
سلام خسته نباشید میخواستم بدونم چطوری میتوانم هنگامی که از scaffolding mvc استفاده میکنم علاوه بر اکشن های که به صورص خودکار میسازد اکشن سفارشی من هم بسازد ؟
من میدونم ظاهر scaffoldingرا با ویرایش t4 می شود انجام داد اما اضافه کردن اکشن را نمیدانم.
کسی میتواند بگوید چطور میشود به scaffolding اکشن مورد نظر اضافه کرد یا اشکن های موجود را ویرایش کرد ؟
2 پاسخ
سلام، وقت بخیر، برای اینکار همونطور که گفتید باید فایل t4 مربوطه رو ویرایش کنید، مسیر فایل های t4 برای Scaffolding در مسیر زیر قرار داره (مسیر بر اساس نسخه VS متفاوت هست):
C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\Extensions\Microsoft\Web\Mvc\Scaffolding\Templates
اما بهتره که فایل هایی که که داخل این پوشه هست رو ویرایش نکنید، چون رو پروژه های دیگتون تاثیر میزاره، به جاش داخل پروژتون یک پوشه با نام CodeTemplates ایجاد کنید و پوشه MvcControllerWithContext رو داخلش کپی کنید (Template ها بر اساس زبان وجود دارند که شما نسخه سی شارپ رو کپی کنید):
تو قدم بعدی فایل template ای که کپی کردید رو ویرایش کنید، برای مثال، من می خوام یه Action با نام MyAction اضافه کنم، تو فایل t4 بخشی که کنترلر تعریف شده به صورت زیر تغییر بدید:
#> public class <#= ControllerName #> : Controller { private <#= ContextTypeName #> db = new <#= ContextTypeName #>(); public ActionResult MyAction() { return null; } // GET: <#= routePrefix #> <# if (UseAsync) { #> public async Task<ActionResult> Index() <# } else { #> public ActionResult Index() <# } #>
همونطور که می بینید یه بخش برای Action مورد نظرم اضافه کردم. حالا وقتی شما بوسیله قابلیت Scaffolding کنترل و View ها رو ایجاد می کنید، می تونید تغییرات رو تو کنترلر ایجاد شده ببینید:
namespace SampleMVC { public class CustomersController : Controller { private MyDbContext db = new MyDbContext(); public ActionResult MyAction() { return null; } // GET: Customers public ActionResult Index() { return View(db.Customers.ToList()); }
این کنترلر بر اساس کلاس MyDbContext و کلاس Customer ساخته شده که شما بر اساس مدل خودتون ایجاد کنید.
سلام خسته نباشید من به کنترلر اکشن متد جدید با نام MultiDelete نوشتم و یک t4 با همین نام ساختم MultiDelete.cs.t4
ولی مشکلی که دارم این هست که هنگام استفاده از Controller with views ویوی MultiDelete نمیسازد و من باید دستی ویوی بسازم و تمش را MultiDelete قرار بدم
چطور باید بهش بگم این ویو هم بسازد ؟