2016-05-02 8 views
0

Ich versuche, meine Enum zu binden, mit LinqMvc SelectListItem Bindung an Dropdown Enum mit

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 
} 

Meine Methode zu Dropdownlist:

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

Ich erhalte die alle Enum-Werte. Ich möchte es durch einige Werte ausfiltern, damit ich eine Zeichenfolge fest codierte.

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

Ich möchte nur diese Elemente von enum gebunden werden.

Antwort

0

Warum Sie keine SelectList erstellen, die nur die erforderlichen Werte enthalten:

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

Aber wenn Sie noch Linq zu bevorzugen und Filtern können Sie ein Element der Auswahlliste nur hinzufügen, wenn es in _RenderingTextboxFieldsValues ist durch Hinzufügen so etwas wie dieses .Where(v=> fields.Contains(v.ToString())) vor dem 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(); 
     } 
+0

Vielen Dank u sehr much.It Hilft –