0

我有一个带有razor视图引擎的 asp.net Web 应用程序。我想测试模型是否null存在

<center><h2 style="color:red">Les actualites des taches</h2></center>
<br />
<br />
@if(Model[0].Count == 0 || Model[0] == null) {
    <label>Pas de nouvelle information</label>
                         }
else{

foreach( var v in Model[0]){
    <div><label>@v</label></div>
   <br />
}

}
<br />
<br />
<br />
<br />
<center><h2 style="color:red">Demande de reservation de véhicules</h2></center>
<br />
<br />
@if (Model[1].Count == 0 || Model[1] == null)
{
    <label>Pas de demande</label>
                         }
else{
    <form action="\Travail\Validation_Reservation" method="post">
@foreach( var v in Model[1]){
    <div><label>@v</label>
    <input type="submit" name="ok" value="valider" />
   <input type="submit" name="No" value="refuser" /></div>
    <br />
}
        </form>
}
<br />
<br />

<center><h2 style="color:red">Demande de validation de tache</h2></center>
<br />
<br />
@if (Model[2].Count == 0 || Model[2] == null)
{
    <label>Pas de demande</label>
                         }
else{
    <form action="\Travail\Validation_Demande" method="post">
@foreach( var v in Model[2]){
    <div><label>@v</label>
    <input type="submit" name="ok" value="valider" />
   <input type="submit" name="No" value="refuser" /></div>
    <br />
}
        </form>
}
<br />
<br />
<center><h2 style="color:red">Déclarer l'absence ou la présence</h2></center>
<br />
<br />
<form action="\Travail\Validation_Absence" method="post">
<input type="submit" name="ok" value="je vais etre indisponible" />
<input type="submit" name="No" value="je suis de retour" /></div>
    <br />

        </form>

null但是这一行出现了 Model 的一个例外@if(Model[0].Count == 0 || Model[0] == null) {

那么我该如何解决这个问题呢?有什么建议么?

4

2 回答 2

5

反转操作数以null首先检查:

@if (Model == null || Model[0] == null || Model[0].Count == 0) {

随后检查此类表达式中的条件,以便如果第一个表达式给出true(或false在的情况下&&) - 不执行进一步的计算。因此,最好首先检查null,然后才使用对象进行进一步检查。

于 2013-07-22T08:34:12.693 回答
0

我强烈建议您永远不要将 NULL 模型传递给您的视图。传递一个视图模型类,该类具有您打算在视图中使用的属性,例如

public class MyViewModel
{
    IList<Reservation> Reservations { get; set; }

    public MyViewModel() {
        this.Reservations = new List<Reservation>();
    }
}

然后在你看来你可以这样做

@model MyViewModel

if (!Model.Reservations.Any()) {
     <label>No reservations</label>
}

我很欣赏我的代码可能与您所拥有的不完全匹配,但我希望核心思想能够通过。我总是用我的视图来做这件事,我从来没有将 NULL 模型传递给视图。我认为使用更具描述性的方式来布置视图逻辑会更简洁,但使用具有良好命名属性的视图模型。

于 2013-07-22T09:02:19.847 回答