Razor DropDownList对于SelectList,如何绑定不可分割的选择项或如何做到这一点

本文关键字:选择 不可分割 这一点 何做 绑定 SelectList 对于 DropDownList 何绑定 Razor | 更新日期: 2023-09-27 18:04:30

以下代码运行良好,我在许多视图中使用这种绑定方法,因此我试图转换为静态函数。以下是我的尝试。有人能帮我强调一下该怎么做吗?

@Html.DropDownListFor(model => model.CardExpiryYear, new SelectList(
    new[] { new { Text = "- -", Value = (string)null } }.Concat(
    Enumerable.Range(DateTime.Now.Year, 10)
    .Select(r => new
    {
        Text = r.ToString(),
        Value = r.ToString()
    })),
    "Value", "Text")
)

以下是我的尝试:

@Html.DropDownListFor(model => model.CardExpiryYear, IEnumerable < SelectListItem > vmConstants.listExpiryYearTest)
public static SelectList listExpiryYearTest()
        {
            var listExpYears = new SelectList(
                        new[] { new { Text = "- -", Value = (string)null } }.Concat(
                        Enumerable.Range(DateTime.Now.Year, 10)
                        .Select(r => new
                        {
                            Text = r.ToString(),
                            Value = r.ToString()
                        })),
                        "Value", "Text");
            return listExpiryYears; 
        }

Razor DropDownList对于SelectList,如何绑定不可分割的选择项或如何做到这一点

此代码看起来错误:

@Html.DropDownListFor(model => model.CardExpiryYear, 
    IEnumerable < SelectListItem > vmConstants.listExpiryYearTest)

您有一个返回选择列表的方法,因此插入该方法调用作为传递给DropDownListFor():的第二个参数

@Html.DropDownListFor( model => model.CardExpiryYear, 
    vmConstants.listExpiryYearTest() )

这假设您有一个名为"vmConstants"的类,其中有一个称为"listExpiryYearYest"的静态方法。

附带说明:考虑使用标准的c#命名约定,该约定将类和方法名称大写。

@Html.DropDownListFor(m => m.CardYearExpiry, (IEnumerable<SelectListItem>) ViewBag.CardYearExpiry,  null)

当我需要一个绑定到IEnumerable的dropdownlist时,我通常是这样做的。ViewBag只是我在C#中声明的一个新的选择列表,而视图正在渲染(下面的示例(。

ViewBag.CardYearExpiry = item.Select(s => new SelectListItem
{
  Value = s.Id,
  Text = s.Name
}).OrderBy(o => o.Text);