C# 我不知道';我不明白为什么我有空的MVC AJAX

C# 我不知道';我不明白为什么我有空的MVC AJAX,c#,html,ajax,asp.net-mvc,asp.net-ajax,C#,Html,Ajax,Asp.net Mvc,Asp.net Ajax,我已经得到和张贴部分行动。给我一张我在ma应用程序中拥有的图片列表 [HttpGet] public PartialViewResult ViewImageFileList() { IEnumerable<string> allImages = Directory.EnumerateFiles(Server.MapPath("~/Images/NBAlogoImg/")); return PartialView(allImages); } 我的部分视图的My.ch

我已经得到和张贴部分行动。给我一张我在ma应用程序中拥有的图片列表

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

    return PartialView(allImages);
}
我的部分视图的My.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>
@model IEnumerable
Логотипы которые имеются
    @foreach(模型中的var完整路径) { var fileName=Path.GetFileName(完整路径);
  • @fileName

  • }


@使用(Ajax.begin)(
“ViewImageFileList”,
“团队”,
新的AjaxOptions(){HttpMethod=“POST”,OnComplete=“reloadPage()”})
{
Введите имя с указание типа изображения
}
函数重载页面(){
location.reload();
}
我的问题是,当我编写删除图像并提交它时,会出现空引用(我是通过ajax实现的)。我有这个错误,但当我单击继续时,图像被删除,我的脚本重新加载页面工作


我想了解我为什么使用空值以及如何修复它,因为当我删除图像时,它总是会停止我的应用程序。

当你浏览图像时,你会返回模型已传递的视图

return PartialView(allImages); //allImages is a model
但当您删除图像时,返回的视图中没有任何模型

return PartialView(); //need to pass a model
因此,删除后,您希望重定向到
viewmagefilelist
进行浏览 所有图像

[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);
}
[HttpPost]
public PartialViewResult ViewImageFileList(字符串imageNameType)
{
var fileToDeletePath=Path.Combine(Server.MapPath(“~/Images/NBAlogoImg/”),imageNameType);
if(System.IO.File.Exists(fileToDeletePath))
{
fileOperations.Delete(fileToDeletePath);
}
IEnumerable allImages=Directory.EnumerateFiles(Server.MapPath(“~/Images/NBAlogoImg/”);
返回局部视图(所有图像);
}

问题在于,当您在删除图像后发布时,不会像在
viewmagefilelist中那样正确地填充局部视图的模型。当视图引擎尝试构建您将在发送到客户端后发送的视图时,会出现这种情况,在尝试对空引用执行
foreach
时,会出现空引用异常

也就是说,您需要将所有图像传递到
PartialView
。因此,只需在您发布的操作方法中的
return
语句之前添加以下内容:

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

谢谢你,我发现了我愚蠢的错误。谢谢你,a提出同样的动议<代码>返回重定向到操作(“ViewImageFileList”)它无法工作,返回类型为partial@remk93是的,我错了。您只需将返回类型更新为
ActionResult
RedirectToRouteResult
,即可使其正常工作。请参阅更新的答案。第二种情况更好,因为我有一个脚本来重新加载页面,而重定向到部分视图不是一个好主意,因为在部分视图中您没有母版页
[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);
}
var allImages = Directory.EnumerateFiles(Server.MapPath("~/Images/NBAlogoImg/"));
return PatialView(allImages);