在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)传递到帮助器中,以便无论字段名如何,都可以重用我的帮助器?
还是……有没有一种我不知道的完全不同的方法?
谢谢!
因为您喜欢使用动态,所以我将坚持使用它。你可能想传递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)