مقداردهی SelectList در Asp.Net Core

برای نمایش و انتخاب یک و یا چند مقدار از یک Select از Select option استفاده میکنیم . 

در این مثال ما نمایش دسته بندی ها را مد نظر داریم برای اینکار ابتدا یک متغیر با نام Category ایجاد میکنیم و کوئری مورد نظر را برای واکشی اطلاعات از دیتابیس مینویسم .

public IList<SelectListItem> GetAllCategory()
{
    var category = _context.Categories
          .AsNoTracking()
          .OrderByDescending(c => c.Id)
          .Select(c => new SelectListItem()
          {
              Text = c.Name,
              Value = c.Id.ToString()
          }).ToList();
}

چون اطلاعات واکشی شده ما صرفا برای نمایش است از AsNoTracking() استفاده کردیم و در خط بعدی برای مرتبط سازی اطلاعات بر اساس آخرین Id ثبت شده از OrderByDescending() استفاده کردیم و در نهایت Select مورد نظر را به صورت Projection و از جنس SelectListItem با 2 مقدار Text و Value قرار میدهیم . 

مقدار Text به که به عنوان نام نمایشی در Option و ٰValue هم مقدار Value در Option های SelectList است . به عنوان مثال : 

<select>
         <option value="1">Asp.Net Core</option>
         <option value="2">EntityFramework Core</option>
         <option value="3">DotNet Tools</option>
</select>

مرحله بعدی این مقدار واکشی شده از دیتابیس را در یک ViewData به صورت زیر قرار بدیم که بتوانیم سمت View از آن استفاده کنیم

 ViewData["Category"] = new SelectList(categories, "Value", "Text");

در اینجا یک SelecteList را New میکنیم و در پارامتر اول متغیر Category را پاس میدهیم و دو مقدار بعدی هم دقیقا Value و Text را قرار میدهیم . 

در نهایت سمت View مقدار ViewData خود را به TagHelper مربوط به Select که asp-items میباشد را به صورت زیر میدهیم .

<select asp-items="@(ViewData["Category"] as SelectList)">

نکته :

در اینجا ما دیگه مقدار Option را قرار نمیدهیم و این مقدار از ViewData گرفته خواهد شد و به صورت خودکار Option ها مقداردهی می شوند . 

در آخر Select option ما به صورت زیر به نمایش در خواهد آمد .