处理partials和null模型值中的空模型

时间:2011-09-19 15:03:56

标签: asp.net-mvc-3 razor null

在将模型传递给partials以及处理模型中的空值时,我遇到了如何处理空值的问题。

在这个块中:

@section TaskBar{
     @Html.Partial("_TaskBar", Model);
}

我收到此错误: e:\ Views \ Shared_TaskBar.cshtml(107):错误CS1002 :;预期

???

另外,部分

中的空值有问题

我试过了:     this.userID = ko.observable(“@ if(Model.UserID == null){”null“} else {Model.UserID}”);

this.userID = ko.observable("@(Model.UserID == null)?"null" :Model.UserID");

用;等...

所以我的问题是..我的部分将经常传递一个空模型..所以如何处理部分方法,如果null如何在视图中处理?谢谢!

2 个答案:

答案 0 :(得分:10)

我不清楚你对Model null的意思,因为你的例子检查UserId是否为null而不是Model本身。因此,假设您要检查整个模型,我个人会在视图开头使用简单的if。 像这样的东西

 @model MyViewModel
 @if (Model != null) {
 <div>
    @Model.UserId
 </div>
 }

或者当您定义RenderSection传递Required=false时,因此在声明该部分时,如果模型具有值,则可以选择性地执行此操作。

在layout.cshtml中

@RenderSection("Taskbar", false)

在您的网页

 @if (Model != null) {
   section TaskBar{
     @Html.Partial("_TaskBar", Model);
   }
 }

答案 1 :(得分:3)

为了简化您的代码,您应该使用Null Object pattern

使用初始化为空/无意义值的对象,而不是使用null来表示不存在的值。这样你就不需要在几十个地方检查空值并获得NullReferenceExpections以防你错过它。

甚至有一种更简单的方法,源于此。不要创建特定的NullObject类,只需传递所需类的新实例。如果它是一个简单的ViewModel,这通常就足够了,因为C#已经为你初始化了值,并且很可能是你想要的大部分时间。