我不明白为什么我有空 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);
我有 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);