Razor DropDownListFor SelectList,如何绑定inumberable选择项或如何执行此操作?

时间:2014-05-22 08:19:40

标签: c# razor

以下代码工作正常,我在许多视图中使用这种绑定方法,所以我试图转换为静态函数。以下是我的尝试。有人可以帮我强调如何做到这一点吗?

@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; 
        }

2 个答案:

答案 0 :(得分:0)

此代码看起来不对:

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

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

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

这假设您有一个名为“vmConstants”的类,其中包含一个名为“listExpiryYearYest”的静态方法。

附注:考虑使用标准的c#naming conventions,它将类和方法名称大写。

答案 1 :(得分:0)

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

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

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