Привязка MVC Selectlistitem к DropDownList с помощью перечисления

Я пытаюсь привязать мое перечисление к выпадающему списку с помощью linq

public enum InvoiceTemplateHeader
{
    TENANTNAME,
    TENANTADDRESS,
    TENANTCITY,
    TENANTSTATE,
    TENANTCOUNTRY,
    SONO,
    SODATE,
    SOAMOUNT,
    SOSTATUS,
    EXP_DELDATE,
    INVOICENO,
    INVOICEDATE,
    INVOICEAMOUNT,
    NETAMOUNT,
    HANDLINGCHARGE,
    PAIDAMOUNT,
    INVOCIEQTY,
    TAXPERCENT,
    TAXAMOUNT,
    TAXDETAILVIEW,
    DISCOUNTPERC,
    DISCOUNTAMOUNT,
    BILLINGADDRESS,
    RETAILERNAME,
    RETAILERADDRESS,
    DELIVERYADDRESS,
    TERMANDCONDITIONS,
    SIGINATURE,
    INVOICEDETAIL,
    AMOUNTINWORDS,

    LineItem,
    HeaderData,
    FooterData
}

мой метод:

   private List<SelectListItem> FillInvoiceHeaderTemplate()
        {
            List<String> fields = null;
            fields = _RenderingTextboxFieldsValues.Split(ServiceDataManager.CommaSplitter).ToList();
            return (new List<SelectListItem>() { new SelectListItem() { Text = Misc.getResource("APP_CMN_LBL_OptionSelect"), Value = "" } }).Union
                                       (Enum.GetValues(typeof(ServiceDataManager.InvoiceTemplateHeader)).Cast<ServiceDataManager.InvoiceTemplateHeader>().Select(v => new SelectListItem
                                       {
                                           Text = v.ToString(),
                                           Value = v.ToString()

                                       })).ToList();
        }

Я получаю все значения перечисления.
Я хочу отфильтровать его по некоторым значениям, поэтому я жестко закодировал строку.

  private string _RenderingTextboxFieldsValues =
     "TENANTNAME[*],TENANTADDRESS[*],TENANTCITY,TENANTSTATE[*]";

я хочу, чтобы только эти элементы из перечисления были связаны.

1 ответ

  1. Почему бы вам не создать aSelectList, который содержит только необходимые значения:

    private List<SelectListItem> FillInvoiceHeaderTemplate()
    {
        return new List<SelectListItem>
        {
          new SelectListItem { Text = Misc.getResource("APP_CMN_LBL_OptionSelect"), Value = "" }
          new SelectListItem { Text = InvoiceTemplateHeader.TENANTNAME.ToString(),Value = InvoiceTemplateHeader.TENANTNAME.ToString() },
          new SelectListItem { Text = InvoiceTemplateHeader.TENANTADDRESS.ToString(),Value = InvoiceTemplateHeader.TENANTADDRESS.ToString() },
          new SelectListItem { Text = InvoiceTemplateHeader.TENANTCITY.ToString(),Value = InvoiceTemplateHeader.TENANTCITY.ToString() },
          new SelectListItem { Text = InvoiceTemplateHeader.TENANTSTATE.ToString(),Value = InvoiceTemplateHeader.TENANTSTATE.ToString() }
        }
    }
    

    Но если вы все еще предпочитаете использовать linq и фильтрацию, вы можете добавить элемент списка выбора, только если он _RenderingTextboxFieldsValuesесть, добавив что-то подобное .Where(v=> fields.Contains(v.ToString()))перед Select:

    private string _RenderingTextboxFieldsValues =   "TENANTNAME,TENANTADDRESS,TENANTCITY,TENANTSTATE";
    
    private List<SelectListItem> FillInvoiceHeaderTemplate()
            {
                List<String> fields = null;
                fields = _RenderingTextboxFieldsValues.Split(ServiceDataManager.CommaSplitter).ToList();
                return (new List<SelectListItem>() { new SelectListItem() { Text = Misc.getResource("APP_CMN_LBL_OptionSelect"), Value = "" } }).Union
                                           (Enum.GetValues(typeof(ServiceDataManager.InvoiceTemplateHeader)).Cast<ServiceDataManager.InvoiceTemplateHeader>().Where(v=> fields.Contains(v.ToString())).Select(v => new SelectListItem
                                           {
                                               Text = v.ToString(),
                                               Value = v.ToString()
    
                                           })).ToList();
            }