[英]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,則會發生您描述的行為。
好的,問題是您正在嘗試將string
與int
進行比較。
更改第二行,如下所示:
@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.