簡體   English   中英

在Webmatrix頁面C#中將字段名稱傳遞給Razor @helper

[英]Passing Field Name to Razor @helper in Webmatrix pages C#

這段代碼獲取了一個唯一的組織名稱列表,以供顯示在我的.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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM