Я не понимаю, почему у меня ноль MVC AJAX - PullRequest
0 голосов
/ 28 января 2019

У меня есть Get и Post частичное действие.Возьми мне список изображений, которые у меня есть в моем приложении.

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

    return PartialView(allImages);
}

Опубликовать удаление изображения, которое я добавлю.

[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).У меня есть эта ошибка Нулевая ссылка , но когда я нажимаю, чтобы продолжить, изображение удаляется, и мой скрипт для перезагрузки страницы работает.

Я хочу понять, почему я беру нулевое значение и как я могу это исправить, потому что оно всегда останавливает мое приложение, когда я удаляю изображение.

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Проблема в том, что при выполнении POST после удаления изображения вы не заполняете модель частичного представления, как вы правильно делаете в ViewImageFileList.Это приводит к тому, что View Engine пытается создать представление, которое вы отправляете после POST клиенту, чтобы получить исключение нулевой ссылки при попытке выполнить foreach для нулевой ссылки.

ТоСказано, что вам нужно передать PartialView все изображения.Поэтому просто добавьте перед оператором return в методе действия, который вы POST это:

var allImages = Directory.EnumerateFiles(Server.MapPath("~/Images/NBAlogoImg/"));
return PatialView(allImages);
0 голосов
/ 28 января 2019

Когда вы просматриваете изображения, вы возвращаете вид с пропущенной моделью

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

Но при удалении изображений вы возвращаете вид без какой-либо модели

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...