我使用MVC与Razor视图。在这个特定的视图中,我将传递类Bed的一个实例。Bed有一个属性string Infection。现在,在这个实例中,我在视图中定义了一个布尔HasInfection,用于更改显示的内容。这最初被宣布为
var HasInfection = (Model.Infection.Trim() != "";并按预期工作。但是,现在有一个用例,其中Bed可能为null。下面是第一个代码块:
@{
ViewBag.Title = "Edit";
var HasInfection = false;
if (Model != null)
{
HasInfection = Model.Infection.Trim() != "";
} // I get a NRE on this line whenever Model is null
}我甚至尝试过复杂嵌套的if-else解决方案,并且我仍然在if的结束大括号上得到了一个NRE。
if (Model.Infection == null)
{
HasInfection = false;
}
else
{
if (Model.Infection != "")
{
HasInfection = true;
}
else
{
HasInfection = false;
}
}我尝试了我所能想到的每一个组合,但都没有成功。如果Model是null或Model.Infection == "",那么HasInfection应该是false。
我做错了什么?
编辑
在尝试var HasInfection = Model != null && !string.IsNullOrWhiteSpace(Model.Infection);之后(因为Infection可能是“"),我仍然会得到一个NullReferenceException。即使异常在视图中,是否有可能出现在Controller中?
public ActionResult EditReservation(int Facility, string Room, string Bed)
{
var BedModel = New Bed();
List<Bed> _b = BedModel.GetBed(Facility, Room, Bed);
Bed result = _b.Where(bed => bed.BedStatus == "R" || bed.BedStatus == "A").FirstOrDefault();
return View("Edit", result);
}发布于 2014-06-12 11:58:17
我也有同样的问题。
当查看this问题中的第二条评论时,我发现我的例外实际上是在前面35行(括号外),而不是NullReferenceException指向的结束括号。
前任:
if(Model.Infection != null)
{
<p>Some Html</p>
} //given NullReferenceException location
<p>Model.Infection</p> //Actual cause of NullReferenceException since
//here Model.Infection can be null发布于 2013-11-22 14:14:32
你应该能做这样的事:
var HasInfection = Model != null && !String.IsNullOrWhitespace(Model.Infection)我想我从来没有把一个空模型传递给Razor视图,但是我不明白为什么这个模型不能工作。
顺便说一句,你可以考虑拥有一个你可以传递的“NullBed”对象,无论你认为“失踪”床上的对象是什么,它的行为方式都是正确的--那么你就不需要到处检查空白点,这可能会成为一个相当令人厌烦的暴政。
编辑:现在您已经发布了控制器代码,看起来模型无论如何都不可能是空的,所以这看起来像是分散了注意力。我怀疑你找错地方了不管是什么问题。
Edit2:哦,现在它又从控制器代码中消失了。觉得系统地使用调试器可能比StackOverflow更有效.我首先传递一些固定的内容,并将其传递到控制器中的view调用中,然后计算出正在发生的事情,也许是通过在您的视图中显示东西。
如果您控制了Bed类,您可以通过在床上添加一个HasInfection属性来帮助自己和后继者,该属性可以执行返回该布尔值所需的任何操作。您也可以通过将BedStatus签入属性来改进控制器。这样做的好处不仅仅是风格上的,它还将帮助调试这类问题,因为与床对象相关的东西将发生在该代码中,而视图中只剩下的东西(一个可怕的调试位置)会简单得多。
发布于 2013-11-22 14:11:45
HasInfection = Model != null && !string.IsNullOrWhitespace(Model.Infection);https://stackoverflow.com/questions/20146863
复制相似问题