2015-06-08 71 views

回答

0

在您的情況下,可能會出現@Model.Sides 中沒有物品的情況。在這種情況下,您可以使用。

@if(Model.Sides.Any() && Model.Sides.SingleOrDefault(a => a.Name == "B").Any()) 
{ 
console.log("@Model.Sides.SingleOrDefault(a => a.Name == "B").Surfaces.Count"); 
} 
else 
{ 
console.log("0"); 
} 
+0

你需要躲避的console.log即@:執行console.log( 「0」); – heymega

0

你只需要檢查你的對象是否被初始化。這個邏輯應該超出你的觀點。

@{ 
    int count = 0; 

    //Check the model isnt null first 
    if (Model != null) 
    { 

     var side = Model.Sides.SingleOrDefault(a => a.Name == "B"); 

     if (side != null) 
     { 
      //You can perform null check on surfaces here as well 
      count = side.Surfaces.Count; 
     } 

    } 


} 

<script> 

    console.log("@count"); 

</script> 
0

你可以嘗試以下

@if(Model.Sides.SingleOrDefault(a => a.Name == "B").Any()) 
{ 
console.log("@Model.Sides.SingleOrDefault(a => a.Name == "B").Surfaces.Count"); 
} 
else 
{ 
console.log("0"); 
} 
0

SingleOrDefault將返回NULL,如果列表中不包含正好一個項目。

如果'where'子句a.Name == 'B'沒有完全返回一個項目,則結果將爲空。

因此,如果您的Sides列表中沒有一個'B'(即沒有或2個或多於2個),SingleOrDefault的結果將爲空,並且.Surfaces會給出錯誤'Object reference not set to an對象的實例。

如果你只是想計數爲零時,有不只是一個B面,然後用:

console.log("@(Model.Sides.SingleOrDefault(a => a.Name == "B") ?? new Side { Surfaces = new List<Surface>() }).Surfaces.Count"); 

哪裏?意思是:如果左邊部分爲null,返回此而不是空 ,你創建一個虛擬Side一個空列表,以便Surfaces.Count == 0

另外,使用一個變量:

@{ 
    var side = Model.Sides.SingleOrDefault(a => a.Name == "B"); 
    if (side == null) 
    { 
     @:console.log("none") 
    } 
    else 
    { 
     @:console.log(@side.Surfaces.Count); 
    } 
} 

作爲一種清潔的替代,你可以使用SelectMany()代替,像(未經測試):

Model.Sides.Where(a=>a.Name=="B").SelectMany(x=>x.Surfaces).Count() 

,那麼你就不需要擔心臨時變量等,但將返回「面」的數量爲所有「B」雙方,所以可能不是你的要求。

0

漁獲量(E)做什麼:

這是指能夠抑制任何錯誤。將你認爲可能錯誤的代碼封裝在try catch中,catch不做任何事情。

但是,這可能會導致更多的問題,只是要小心空的catch塊。

例如:

try 
    { 
     //code that errors 
    } 

catch (e) 
    { 
     ; 
    } 

//Continue 
相關問題