在Webmatrix页面中传递字段名给Razor @helper

本文关键字:字段 Razor @helper Webmatrix | 更新日期: 2023-09-27 18:06:42

这段代码获得一个唯一的组织名称列表,以便在我的。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)

…然后,我在我的"视图"页面上得到了我的唯一列表。

工作完美,除了你看到我必须在帮助器中指出。org_name。

我的问题是如何将字段名(org_name)传递到帮助器中,以便无论字段名如何,都可以重用我的帮助器?

还是……有没有一种我不知道的完全不同的方法?

谢谢!

在Webmatrix页面中传递字段名给Razor @helper

因为您喜欢使用动态,所以我将坚持使用它。你可能想传递selector:

@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)