ASP.NET MVC2中的自定义DropdownFor

时间:2010-12-07 02:47:23

标签: asp.net-mvc asp.net-mvc-2

我正在尝试通过创建自己的Html帮助程序方法在我的项目中自动构建下拉列表,该方法采用“下拉组”代码并自动构建Html。但是,它需要在完全支持模型的同时执行此操作。

我的结束代码需要看起来像这样。

<%: Html.CodeList(m => m.state, 121) %>

...其中“121”是从数据库返回键/值对字典的代码组。

到目前为止,这是我的Html帮助程序方法。

    public static MvcHtmlString CodeList<T, TProp>(this HtmlHelper<T> html, Expression<Func<T, TProp>> expr, int category)
    {
        Dictionary<int, string> codeList = CodeManager.GetCodeList(category); //returns dictionary of key/values for the dropdown
        return html.DropDownListFor(expr, codeList, new Object()); //this line here is the problem
    }

我无法想清楚究竟如何交给DropDownListFor方法。我假设我确实返回了html.DropDownListFor(),但我遗漏了一些明显的东西。有什么帮助吗?

1 个答案:

答案 0 :(得分:1)

你去了:

public static MvcHtmlString CodeList<T, TProp>(
    this HtmlHelper<T> html, 
    Expression<Func<T, TProp>> expr, 
    int category
)
{
    var codeList = CodeManager.GetCodeList(category);

    var selectList = new SelectList(
        codeList.Select(item => new SelectListItem { 
            Value = item.Key.ToString(), 
            Text = item.Value
        }), 
        "Value", 
        "Text"
    );
    return html.DropDownListFor(expr, selectList);
}

备注:CodeManager.GetCodeList等静态方法在单独测试组件方面非常糟糕。