簡體   English   中英

C#剃刀-根據鍵顯示列表中的值

[英]C# Razor - Display value from list based on key

我試圖根據鍵顯示列表中的一些文本:

<td>@x.OutcomeSummary</td>
<td>@Model.SummaryOutcomes.FirstOrDefault(c => c.Value == x.OutcomeSummary).Name</td>
<td>@Model.SummaryOutcomes.FirstOrDefault(x.OutcomeSummary).Name</td>

在這種情況下, x.OutcomeSummary為7,我希望它從SummaryOutcomes獲得相關的文本,鍵為7。

第二行給我以下錯誤: System.NullReferenceException:對象引用未設置為對象的實例。

第三行給我一個錯誤,指出FirstOrDefault命令具有無效的參數。

導入以下模型:

public class DogSummaryView
{
    public IEnumerable<DogIncident> Incidents { get; set; }
    public IEnumerable<Category> SummaryOutcomes { get; set; }
    public IEnumerable<Category> DogBreeds { get; set; }
}

這是類別類:

public class Category
{
    public string Value { get; set; }
    public string Name { get; set; }
    public bool InUse { get; set; }
}

這是控制器:

public ActionResult Summary()
{
    var vm = new DogSummaryView
    {
        Incidents = repository.GetAllRecords().OrderByDescending(x => x.DateRecieved),
        SummaryOutcomes = repository.GetAllSummaryOutcomes()
    };

    return View("Summary", vm);
}

最后在這里您可以看到列表已填充並初始化:

在此處輸入圖片說明

反正有沒有得到它,以便顯示正確的摘要結果而不是顯示7?

謝謝


非常感謝fourpastmidnight對他的一貫幫助,不僅幫助我找到了解決方案,還幫助我確切地了解了問題的根源。 這是一個更新的(有效的)解決方案:

@foreach (var x in Model.Incidents)
{
    var summaryOutput = "";
    var firstOutcomeSummary = Model.SummaryOutcomes.FirstOrDefault(c => c.Value == x.OutcomeSummary);
    if (firstOutcomeSummary != null) { summaryOutput = Model.SummaryOutcomes.FirstOrDefault(c => c.Value == x.OutcomeSummary).Name.ToString(); }

     <tr>
        <td>@Html.Raw(summaryOutput)</td>
    </tr>
}

FirstOrDefault將只執行返回與謂詞匹配的第一個元素或返回default的操作,即null 對象上調用.Name將拋出NullReferenceException

總之,如果枚舉SummaryOutcomes中沒有Category實例的值為7,則會發生您描述的行為。

好的,問題是您正在嘗試將stringint進行比較。

更改第二行,如下所示:

@Model.SummaryOutcomes.FirstOrDefault(c => c.Value == x.OutcomeSummary.ToString()).Name;

// You could also use '.Value'.

那應該解決您的問題。

更新

嗯,也許x.OutcomeSummary.ToString()會導致枚舉的類型名稱,而不是枚舉常量值的整數值。

嘗試將上面的行更新為以下內容:

@Model.SummaryOutcomes.FirstOrDefault(c => c.Value == ((int)x.OutcomeSummary).ToString()).Name;

更新2014-03-21

根據OP的最新評論,請嘗試以下操作:

// If x.OutcomeSummary is the outcome summary name, then....
var firstOutcomeSummary = @Model.SummaryOutcomes.FirstOrDefault(c => c.Name == x.OutcomeSummary)
if (firstOutcomeSummary != null)
    // Do something here.

// Else, if x.OutcomeSummary is the outcome summary value, e.g. "7", then...
var firstOutcomeSummary = @Model.SummaryOutcomes.FirstOrDefault(c => c.Value == x.OutcomeSummary)
if (firstOutcomeSummary != null)
    // Do something here.

暫無
暫無

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

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