我很努力地找到一種方法來處理我的視圖模型中的空值。其中一些值是我的模型中的嵌套或導航對象。如何在不將邏輯引入視圖的情況下讓我的視圖拋出空引用錯誤?這似乎很容易,但它是一天結束。NullReferenceException和視圖模型導航屬性
我有像這樣一些導航性能視圖模型:
ViewModel.cs
public class ViewModel
{
public ViewModel() {}
public ViewModel (Contact contact, IDemographicService demographicService)
: this()
{
Id = contact.Id;
Name = contact.Name;
EthnicityId = contact.EthnicityId;
if(EthnicityId > 0 || EthnicityId != null)
Ethnicity = deomographicService.GetEthnicityById((int)contact.EthnicityId);
}
public int Id {get;set;}
public string Name {get;set;}
public int? EthnicityId {get;set;}
public Ethnicity Ethnicity {get;set;}
}
我會跳過控制器,因爲那不是我的問題的重點。 (我知道邏輯可以進入控制器,但我選擇將其放入ViewModel中)。
MyView.cshtml
@model ViewModel
<ul>
<li>@Model.Name</li>
<li>@Model.Ethnicity.Name</>//This is the null reference.
</ul>
我想我可以只定義「EthnicityName」字符串(如果返回null空),而不是整個對象,但有我需要從多個屬性實例種族對象。這消除了種族,無論是在視圖模型,控制器還是視圖中。總之,我該怎麼處理null.null?難住了。謝謝。
謝謝約翰。你的回答是我認爲我必須做的。雖然我的示例相當簡單,但我的項目包含其他具有大量屬性的「嵌套」對象,其中定義每個屬性都會影響視圖模型的目的。在這種類型的實例中,會創建一個空對象的「else」語句成爲verboten?即其他LargeObject = new LargeObject();這樣我的視圖有@ Model.LargeObject.Property不會拋出null。我討厭nulls,但我被迫與他們打交道。 – trevorc 2011-03-05 03:35:29
p.s.我的意思是在視圖中使用邏輯 – trevorc 2011-03-05 03:50:21
@name:我不是MVC專家,儘管我已經從關注點分離的角度得到了一般想法。我不認爲這是一個單獨的問題。我會問_why_的問題,我有那些空值 - 什麼是semanatics?他們代表什麼樣的模型? – 2011-03-07 18:24:29