Umbraco 7(如果文件上传为空)

本文关键字:文件 如果 Umbraco | 更新日期: 2023-09-27 17:56:04

我正在使用带有文件上传功能的Umbraco 7。我想检查是否有上传的文件。

如果没有上传文件,我会收到以下错误:Object reference not set to an instance of an object.

我删除了一些代码以使其更易于阅读,但下面是我的表面控制器:

using System.Web.Mvc;
using Umbraco.Web.Mvc;
using Umbraco.Web;
namespace Sp34k.Controllers
{
    public class GalleryItem
    {
        public string projectFile { get; set; }
    }
    public class PortfolioSurfaceController : SurfaceController
    {
        // GET: PortfolioSurface
        public ActionResult GetCategoryDetails(int id)
        {
            GalleryItem gItem = new GalleryItem();
            var node = Umbraco.TypedContent(id);
            string file = node["uploadProjectFiles"].ToString();
            if (string.IsNullOrWhiteSpace(file))
            {
                gItem.projectFile = node["uploadProjectFiles"].ToString();
            }
            return Json(gItem, JsonRequestBehavior.AllowGet);
        }
    }
}

Umbraco 7(如果文件上传为空)

我认为问题出在这一行:

string file = node["uploadProjectFiles"].ToString();

您可能会从使用该密钥的node那里得到一个null作为响应,并且您无法调用ToString()

还有另一个问题:如果字符串 null 或空格,则将其分配给 gItem.projectFile .我假设您只想在它不是空或空格时才分配它。

如果 node 中的对象肯定是字符串或 null,则可以轻松修复代码:

string file = node["uploadProjectFiles"] as string;
if (!string.IsNullOrWhiteSpace(file))
{
    gItem.projectFile = file;
}

as string的意思是"如果对象是字符串,则按此分配它,或者如果它不返回 null"。这样,您可以获得一个字符串(可能仍然是空/空格)或带有字符串类型的 null,您可以检查它。

正在访问的节点键可能是空的,您还需要检查其上的空值:

string file = node["uploadProjectFiles"] !=null ? node["uploadProjectFiles"].ToString() : String.Empty;

然后接下来使用文件变量:

if (string.IsNullOrWhiteSpace(file))
{
   gItem.projectFile = file;
}