我不明白为什么我有空 MVC AJAX

I don't understand why I have null MVC AJAX

我有 Get 和 Post 部分 Action。获取我在 ma 应用程序中的图像列表。

[HttpGet]
public PartialViewResult ViewImageFileList()
{
    IEnumerable<string> allImages = Directory.EnumerateFiles(Server.MapPath("~/Images/NBAlogoImg/"));

    return PartialView(allImages);
}

Post删除我多余的图片

[HttpPost]
public PartialViewResult ViewImageFileList(string imageNameType)
{
    var fileToDeletePath = Path.Combine(Server.MapPath("~/Images/NBAlogoImg/"), imageNameType);

    if (System.IO.File.Exists(fileToDeletePath))
    {
        fileOperations.Delete(fileToDeletePath);
    }

    return PartialView();
}

我的局部视图的 .chhtml

@model IEnumerable<string>

<div class="name-block-style">
     Логотипы которые имеются
</div>

<div id=team-logo-wrapper-images>
<ul>
    @foreach (var fullPath in Model)
    {
        var fileName = Path.GetFileName(fullPath);
        <li>
            <div class="box-name-image">

                <p class="image-name-type">@fileName</p>
                <img src="@Url.Content(string.Format("~/Images/NBAlogoImg/{0}", fileName))"
                     class="logo-images" alt="Логотип команды"
                     title="Логотип команды" />
            </div>
        </li>
    }
</ul>

<div id="delete-image-form" class="form-group">
     @using (Ajax.BeginForm(
    "ViewImageFileList",
    "Team",
     new AjaxOptions() { HttpMethod = "POST", OnComplete = "reloadPage()" }))
{
    <label>Введите имя с указание типа изображения</label>
    <input type="text" class="form-group" name="imageNameType" id="imageNameType" />
    <input type="submit" value="Удалить" class="btn btn-primary" />
}
</div>

<script>
    function reloadPage() {
        location.reload();
    }
</script>

我的问题是当我编写删除图像并提交它时出现空引用(我通过 ajax 完成)。我有这个错误 Null reference 但是当我点击继续时,图像被删除并且我的脚本重新加载页面工作。

我想了解为什么我采用 null 以及如何修复它,因为它总是在我删除图像时停止我的应用程序。

当您浏览图片时,您 return 已通过模型查看

return PartialView(allImages); //allImages is a model

但是当您删除图像时,您 return 在没有任何模型的情况下查看

return PartialView(); //need to pass a model

所以删除后你想重定向到ViewImageFileList浏览 所有图片

[HttpPost]
public RedirectToRouteResult ViewImageFileList(string imageNameType)
{
    var fileToDeletePath = Path.Combine(Server.MapPath("~/Images/NBAlogoImg/"), imageNameType);

    if (System.IO.File.Exists(fileToDeletePath))
    {
        fileOperations.Delete(fileToDeletePath);
    }

    return RedirectToAction("ViewImageFileList");
}

或再次在删除操作中检索图像并将列表传递给查看

[HttpPost]
public PartialViewResult ViewImageFileList(string imageNameType)
{
    var fileToDeletePath = Path.Combine(Server.MapPath("~/Images/NBAlogoImg/"), imageNameType);

    if (System.IO.File.Exists(fileToDeletePath))
    {
        fileOperations.Delete(fileToDeletePath);
    }

    IEnumerable<string> allImages = Directory.EnumerateFiles(Server.MapPath("~/Images/NBAlogoImg/"));

    return PartialView(allImages);
}

问题是,当您 POST 删除图像后,您没有填充局部视图的模型,正如您在 ViewImageFileList 中所做的那样。当视图引擎尝试构建您将在 POST 之后发送给客户端的视图时,会在尝试对空引用执行 foreach 时获得空引用异常。

也就是说,您需要的是将所有图像传递给 PartialView。所以只需在操作方法中的 return 语句之前添加 POST this:

var allImages = Directory.EnumerateFiles(Server.MapPath("~/Images/NBAlogoImg/"));
return PatialView(allImages);