معرفی
این مقاله انتخابگرهای غیرعملی را در ASP.NET MVC توضیح می دهد. یک متد عمل یک روش عمومی در یک کنترلر است که می تواند با استفاده از یک URL فراخوانی شود . بنابراین، بهطور پیشفرض، اگر روش عمومی در یک کنترلکننده داشته باشیم، میتوان آن را با استفاده از یک درخواست URL فراخوانی کرد. برای محدود کردن دسترسی به روشهای عمومی در یک Controller، میتوان از ویژگی Non-Action استفاده کرد. Non-Action یکی دیگر از ویژگی های داخلی است که نشان می دهد یک متد عمومی یک Controller یک متد عمل نیست. زمانی استفاده می شود که ما نمی خواهیم آن روش به عنوان یک روش عمل در نظر گرفته شود.
لطفاً مقالات قبلی من را بخوانید تا درباره انتخابگرها در ASP.NET MVC بیشتر بدانید.
بیایید Non-Action Selectors را در عمل از طریق این مثال ببینیم.
مرحله 1
Visual Studio 2015 یا ویرایشگر دلخواه خود را باز کنید و یک پروژه جدید ایجاد کنید.
گام 2
پروژه «برنامه وب» را انتخاب کنید و نام مناسبی برای پروژه خود بگذارید.
![انتخابگر غیرعملی در ASP.NET MVC](http://pezhvak24.ir/dl/10kcor/cscd/article/non-action-selector-in-asp-net-mvc/Images/Non Action Selector In ASP.NET MVC.png)
مرحله 3
الگوی خالی را انتخاب کنید، کادر MVC را علامت بزنید و OK را بزنید.
![انتخابگر غیرعملی در ASP.NET MVC](http://pezhvak24.ir/dl/10kcor/cscd/article/non-action-selector-in-asp-net-mvc/Images/Non Action Selector In ASP.NET MVC02.png)
مرحله 4
روی پوشه Models کلیک راست کرده و یک مدل پایگاه داده اضافه کنید. اکنون Entity Framework را اضافه کنید. برای این کار، روی پوشه Models کلیک راست کرده، Add را انتخاب کنید، سپس New Item را انتخاب کنید.
![انتخابگر غیرعملی در ASP.NET MVC](http://pezhvak24.ir/dl/10kcor/cscd/article/non-action-selector-in-asp-net-mvc/Images/Non%20Action%20Selector%20In%20ASP.NET%20MVC03.png)
شما یک پنجره دریافت خواهید کرد. از آنجا، Data را از پنل سمت چپ انتخاب کنید و ADO.NET Entity Data Model را انتخاب کنید، نام EmployeeModel را به آن بدهید (این نام اجباری نیست، می توانید هر نامی بدهید) و روی "Add" کلیک کنید.
![انتخابگر غیرعملی در ASP.NET MVC](http://pezhvak24.ir/dl/10kcor/cscd/article/non-action-selector-in-asp-net-mvc/Images/Non%20Action%20Selector%20In%20ASP.NET%20MVC04.png)
پس از کلیک بر روی "افزودن پنجره"، ویزارد باز می شود. EF Designer را از پایگاه داده انتخاب کنید و روی "بعدی" کلیک کنید.
![انتخابگر غیرعملی در ASP.NET MVC](http://pezhvak24.ir/dl/10kcor/cscd/article/non-action-selector-in-asp-net-mvc/Images/Non%20Action%20Selector%20In%20ASP.NET%20MVC05.png)
پس از کلیک بر روی "Next" پنجره ای ظاهر می شود. اتصال جدید را انتخاب کنید. پنجره دیگری ظاهر می شود. نام سرور خود را اضافه کنید - اگر محلی است، یک نقطه (.) وارد کنید. پایگاه داده خود را انتخاب کنید و روی "OK" کلیک کنید.
![انتخابگر غیرعملی در ASP.NET MVC](http://pezhvak24.ir/dl/10kcor/cscd/article/non-action-selector-in-asp-net-mvc/Images/Non%20Action%20Selector%20In%20ASP.NET%20MVC06.png)
اتصال اضافه خواهد شد. در صورت تمایل، نام اتصال را همانطور که می خواهید ذخیره کنید. می توانید نام اتصال خود را در زیر تغییر دهید. این اتصال را در پیکربندی وب ذخیره می کند. اکنون، روی "بعدی" کلیک کنید.
![انتخابگر غیرعملی در ASP.NET MVC](http://pezhvak24.ir/dl/10kcor/cscd/article/non-action-selector-in-asp-net-mvc/Images/Non%20Action%20Selector%20In%20ASP.NET%20MVC07.png)
پس از کلیک بر روی NEXT، پنجره دیگری ظاهر می شود. نام جدول پایگاه داده را همانطور که در تصویر زیر نشان داده شده است انتخاب کنید و روی "پایان" کلیک کنید.
![انتخابگر غیرعملی در ASP.NET MVC](http://pezhvak24.ir/dl/10kcor/cscd/article/non-action-selector-in-asp-net-mvc/Images/Non%20Action%20Selector%20In%20ASP.NET%20MVC08.png)
Entity Framework اضافه می شود و کلاس مربوطه در پوشه Models ایجاد می شود.
![انتخابگر غیرعملی در ASP.NET MVC](http://pezhvak24.ir/dl/10kcor/cscd/article/non-action-selector-in-asp-net-mvc/Images/Non%20Action%20Selector%20In%20ASP.NET%20MVC09.png)
مرحله 5
روی پوشه Controllers کلیک راست کنید و یک کنترلر اضافه کنید.
![انتخابگر غیرعملی در ASP.NET MVC](http://pezhvak24.ir/dl/10kcor/cscd/article/non-action-selector-in-asp-net-mvc/Images/Non%20Action%20Selector%20In%20ASP.NET%20MVC10.png)
یک پنجره ظاهر می شود. MVC5 Controller-Empty را انتخاب کنید و روی «افزودن» کلیک کنید.
![انتخابگر غیرعملی در ASP.NET MVC](http://pezhvak24.ir/dl/10kcor/cscd/article/non-action-selector-in-asp-net-mvc/Images/Non%20Action%20Selector%20In%20ASP.NET%20MVC11.png)
پس از کلیک بر روی "افزودن"، پنجره دیگری با DefaultController ظاهر می شود. نام را به HomeController تغییر دهید و روی «افزودن» کلیک کنید. HomeController در پوشه Controllers اضافه خواهد شد . پسوند Controller را برای همه کنترلرها تغییر ندهید، فقط برجسته را تغییر دهید و به جای Default، فقط صفحه اصلی را تغییر دهید.
![انتخابگر غیرعملی در ASP.NET MVC](http://pezhvak24.ir/dl/10kcor/cscd/article/non-action-selector-in-asp-net-mvc/Images/Non%20Action%20Selector%20In%20ASP.NET%20MVC12.png)
کنترل کننده بدون ویژگی NonAction
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Web.Mvc;
- using MvcActionSelectors_Demo.Models;
- namespace MvcActionSelectors_Demo.Controllers
- {
- public class DepartmentController : Controller
- {
- private readonly EmployeeContext _dbContext=new EmployeeContext();
- public ActionResult Index()
- {
- var department = _dbContext.Departments.ToList();
- return View(department);
- }
- public string HelloWorld()
- {
- return "<h2>Hello World, Welcome to programming.</h2>";
- }
- }
- }
کنترلر با ویژگی NonAction
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Web.Mvc;
- using MvcActionSelectors_Demo.Models;
- namespace MvcActionSelectors_Demo.Controllers
- {
- public class DepartmentController : Controller
- {
- private readonly EmployeeContext _dbContext=new EmployeeContext();
- public ActionResult Index()
- {
- var department = _dbContext.Departments.ToList();
- return View(department);
- }
- [NonAction]
- public string HelloWorld()
- {
- return "<h2>Hello World, Welcome to programming.</h2>";
- }
- }
- }
مرحله 6
روی روش Index در HomeController کلیک راست کنید. پنجره "افزودن نمای" با علامت گذاری نام شاخص پیش فرض ظاهر می شود (از صفحه طرح بندی استفاده کنید). بر روی "افزودن" کلیک کنید.
![انتخابگر غیرعملی در ASP.NET MVC](http://pezhvak24.ir/dl/10kcor/cscd/article/non-action-selector-in-asp-net-mvc/Images/Non%20Action%20Selector%20In%20ASP.NET%20MVC13.png)
کد برای نمای نمایه
- @model IEnumerable<MvcActionSelectors_Demo.Models.Department>
- @{
- ViewBag.Title = "Index";
- }
- <h2>List of Department</h2>
- <table class="table table-bordered">
- <thead>
- <tr>
- <th>@Html.DisplayNameFor(m=>m.ID)</th>
- <th>@Html.DisplayNameFor(m=>m.DepartmentName)</th>
- </tr>
- </thead>
- <tbody>
- @foreach (var dep in Model)
- {
- <tr>
- <td>@dep.ID</td>
- <td>@dep.DepartmentName</td>
- </tr>
- }
- </tbody>
- </table>
مرحله 7
پروژه را با استفاده از Ctrl+F5 بسازید و اجرا کنید.
http://localhost:56100/Department/HelloWorld
![انتخابگر غیرعملی در ASP.NET MVC](http://pezhvak24.ir/dl/10kcor/cscd/article/non-action-selector-in-asp-net-mvc/Images/Non%20Action%20Selector%20In%20ASP.NET%20MVC14.jpg)
اکنون، اگر به http://localhost:56100/Department/HelloWorld بروید ، با خطایی مواجه می شوید که منبع را نمی توان مطابق شکل زیر پیدا کرد.
![انتخابگر غیرعملی در ASP.NET MVC](http://pezhvak24.ir/dl/10kcor/cscd/article/non-action-selector-in-asp-net-mvc/Images/Non%20Action%20Selector%20In%20ASP.NET%20MVC15.png)
به طور کلی، داشتن یک متد عمومی در یک Controller که یک متد اکشن نیست، عمل بدی است. اگر چنین روشی برای انجام محاسبات تجاری داریم، باید جایی در Model باشد نه در Controller. با این حال، اگر به دلایلی میخواهیم متدهای عمومی را در یک کنترلر داشته باشیم و نمیخواهیم آنها را بهعنوان اکشن در نظر بگیریم، از ویژگی Non-Action استفاده کنیم.