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

标签 c# razor webmatrix helper

此代码获取在我的 .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) 传递给助手,以便无论字段名称如何,我的助手都可以重复使用?

或者...是否存在我不知道的完全不同的方法?

谢谢!

最佳答案

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

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

关于c# - 在 Webmatrix 页面 C# 中将字段名称传递给 Razor @helper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15704379/

相关文章:

c# - 如何在 Winform 应用程序中创建 Global.asax? - C#/.NET

javascript - 如何在日期类型字段中设置值

c# - 将 Html.Partial 添加到 Javascript

c# - 这是在 WebMatrix 中设置和维护 session 变量的最佳方式吗?

c# - 多次调用相同的方法并显示进度

c# - Windows 手机 8 : Back Button

css - webmatrix中如何使用外部样式表

razor - 确保页面在 WebMatrix 中通过 HTTPS 提供

c# - 持久对象引用未设置错误 [无相关源行]

razor - ServiceStack Razor ContentPage 在调试中工作但未部署