【问题标题】:Mvc Selectlistitem Binding To DropDownList using EnumMvc Selectlistitem 使用枚举绑定到 DropDownList
【发布时间】:2016-05-02 07:22:42
【问题描述】:

我正在尝试使用 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[*]";

我只想绑定枚举中的这些项目。

【问题讨论】:

    标签: linq list asp.net-mvc-4 enums selectlistitem


    【解决方案1】:

    为什么不创建一个只包含所需值的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 和过滤,您可以通过在 Select 之前添加类似 .Where(v=&gt; fields.Contains(v.ToString())) 的内容来添加选择列表项,前提是它位于 _RenderingTextboxFieldsValues 中:

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

    【讨论】:

    • 非常感谢。它有帮助
    • @TamilmaniP 应该将其标记为答案并投票,如果有效的话。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    相关资源
    最近更新 更多