2013-02-20 90 views
3

有沒有更好的方法來編寫razor cshtml,它檢查嵌套對象爲null,所以如果容器爲空,它不會在容器對象上拋出空的異常錯誤。例如:語法糖來檢查剃刀空值

page.cshtml

Hello @obj1.obj2.prop3 

將拋出錯誤,如果OBJ1爲空或obj1.prop3is空,但

Hello @Html.DisplayFor(m => obj1.obj2.prop3) 

可以檢查空的OBJ1或obj1.obj2所以不會丟錯

Hello @(obj1 == null? "" : (obj1.obj2 == null? "" : obj1.obj2.prop3)) 

太長了

+2

考慮不傳遞null作爲模特屬性 - 往往是可以有「空「對象(空字符串/所有非ref屬性的默認值),可以讓你避免所有這些空檢查... – 2013-02-20 08:29:26

+0

我認爲這是很短的,你正在努力完成;)你有?運算符,但這不適用於你的情況,因爲你需要訪問更多的屬性。 (Obj ??「」給出obj或者如果爲null「」) – JMan 2013-02-20 08:29:56

回答

1

您可以嘗試創建自己的HTML幫助:

static class MyOwnHtmlHelpers 
{ 
    public static string EmptyIfNull<TModel>(this HtmlHelper<TModel> helper, Func<TModel, string> accessor) 
    { 
     try 
     { 
      var result = accessor.Invoke(helper.ViewData.Model); 
      return result; 
     } 
     catch(NullReferenceException) 
     { 
      return string.Empty; 
     } 
    } 
} 

,然後用它是這樣的:

@Html.EmptyIfNull(m => obj1.obj2.prop3)