Mvc Selectlistitem使用枚举绑定到DropDownList



我正在尝试使用linq将我的枚举绑定到dropdownlist

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[*]";

我只想绑定enum中的这些项。

为什么不创建一个只包含所需值的SelectList

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中时,才能通过在Select:之前添加类似于.Where(v=> fields.Contains(v.ToString()))的内容来添加选择列表项

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();
        }

最新更新