我的ViewModel包含以下2个属性:
[DataType(DataType.Upload)]
public HttpPostedFileBase ImageFile { get; set; }
[DataType(DataType.Upload)]
public HttpPostedFileBase AttachmentFile { get; set; }
我的视图是这样写的:
@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "product-master-form", enctype = "multipart/form-data" }))
{
//some html and razor is written here.
<div id="attachments" class="tab-pane fade">
@Html.TextBoxFor(model => model.AttachmentFile, new { type = "file" })
</div><!--/close attachements pane-->
<div id="product-image-up" class="tab-pane fade">
@Html.TextBoxFor(model => model.ImageFile, new { type = "file" })
</div><!--/close panel for image upload-->
}
我的控制器当前如下所示:
if(masterViewModel.ImageFile.ContentLength != 0)
{
if(masterViewModel.ImageFile.ContentLength > imageSizeLimit)
{
otherErrorMessages.Add("Image size cannote be more than " + readableImageSizeLimit);
}
if (!validImageTypes.Contains(masterViewModel.ImageFile.ContentType))
{
otherErrorMessages.Add("Please choose either a GIF, JPG or PNG image.");
}
try
{
//code to save file in hard disk is written here.
}catch(Exception ex)
{
otherErrorMessages.Add("Cannot upload image file: "+ ex);
}
}//end block for handling images.
我的问题是在控制器中,如何检查图像文件是否为null或不为null?当我提交表单时,图像文件不是填写表单内部的必填字段。当我提交没有图像文件的表单时,代码执行到达以下行:if(masterViewModel.ImageFile.ContentLength != 0)
它将引发异常:object reference not set to an instance of an object
。但是,如果我提交带有图像文件的表格,程序将继续正常执行。
先谢谢您。
答案 0 :(得分:1)
为什么不使用空条件运算符?:
if(masterViewModel?.ImageFile?.ContentLength != 0)
这样,如果masterViewModel
,ImageFile
或ContentLength
为null,它将短路并返回null。然后null不等于0,因此它将返回false。
否则,您可以写:
if (masterViewModel != null && masterViewModel.ImageFile != null && masterViewModel.ImageFile.ContentLength != 0)