在Webmatrix页面中将字段名称传递给Razor @helper C#

时间:2013-03-29 13:36:00

标签: c# razor webmatrix helpers

此代码获取在.cshtml页面中显示的唯一组织名称列表:

IEnumerable<dynamic> data = db.Query("Select * from provider 
   where submitter_element = '210300'");  
                            //the 210300 could be any value passed to the query

var items = data.Select(i => new { i.org_name }).Distinct();
   foreach(var name in items){
     <text>@name.org_name<br></text>

data中的记录本身都是唯一的,但每个字段中的数据包含相同的值,即多个提供者具有相同的org_name。

我希望能够多次重复使用data来创建多个唯一列表。我希望将它传递给@helper进行显示。为此,我有以下内容:

@helper ListBoxDistinctDisplay(IEnumerable<dynamic> queryResult)
{  
   IEnumerable<dynamic> distinctItems = queryResult.Select(i => new { i.org_name }).Distinct();
   foreach(var listItem in distinctItems){
   <text>@listItem.org_name<br></text>
}

然后在我的.cshtml页面中我这样做:

@DisplayHelpers.ListBoxDistinctDisplay(data)

...和BINGO,我在“查看”页面上得到了我的唯一列表。

完美无缺,除非您看到我必须在帮助器中指示.org_name。

我的问题是如何将字段名称(org_name)传递给帮助程序,以便无论字段名称如何都可以重复使用我的帮助程序?

或者......我不知道有什么完全不同的方法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

既然你喜欢使用动态,我会坚持下去。 您可能想要传递选择器:

@helper ListBoxDistinctDisplay(IEnumerable<dynamic> queryResult, Func<dynamic, dynamic> selector)
{
    IEnumerable<dynamic> distinctItems = queryResult.Select(x => new {selectedField = selector(x)}).Distinct();
    foreach (var listItem in distinctItems)
    {
        <text>@listItem.selectedField<br/></text>
    }
}

称之为:

@DisplayHelpers.ListBoxDistinctDisplay(data, x => x.org_name)