Подтвердить что ты не робот

КАК? Контроллер не возвращает ничего/текущий вид

SHORT:
Как заставить контроллер возвращать текущее представление или просто ничего не делать?

LONG:
У меня есть частичный вид, где я создал imagelider. Он содержит ссылку, которая отправляет запрос контроллеру для получения следующего изображения (с использованием ajax). Контроллер извлекает следующее изображение, сохраняет его в ViewData и отправляет обратно частичный вид (тот, что выше).

Теперь, что я делаю сегодня, так это то, что когда контроллер достигает последнего изображения, он повторно возвращает одно и то же изображение (путем его повторной установки), но все же создает новое представление, то есть клиент/браузер повторно анализирует "тот же самый", данные.
Это кажется несколько неоптимальным. То, что я хотел бы сделать, это то, что когда контроллер достигает последнего изображения, он просто ничего не должен делать.
Если я возвращаю значение null, представление обновляется с пустым содержимым.
Я хочу, чтобы view/client/browser сохранял все, что у него есть, и контроллер просто ничего не делал.

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult GetNextImage(...)
    {
        if(Request.IsAjaxRequest())
        {
            if(CURRENT_IMAGE != LAST_IMAGE)
            {
                Image image = GetNextImage(...);
                var partialViewResult = new PartialViewResult();
                partialViewResult.ViewName = "ImageSlide";
                partialViewResult.ViewData.Model = image;
                return partialViewResult;
            }
            else
            {
                // DO NOTHING, HOW?
            }
        }

        return RedirectToAction("Error", "Home");
    }
4b9b3361

Ответ 1

Вы можете вернуть EmptyResult, если хотите, чтобы он ничего не делал...

return new EmptyResult();

Если вы используете AjaxHelper, вы можете избежать обновления, предоставив неудачный код состояния (например, 404 или что самое подходящее), что остановит его замену вашего div, поскольку javascript в MicrosoftMvcAjax.js явно проверяет наличие успешный ответ перед обновлением любых элементов: -

this.ControllerContext.HttpContext.Response.StatusCode = 404;
return new EmptyResult();

В конечном счете, лучший способ избежать этого - создать частичный вид, чтобы избежать проблемы в первую очередь (например, вы упоминаете о себе).

Ответ 2

Предполагая, что вы используете MicrosoftMvcAjax, вы можете отправить обратно JavascriptResult, который предупреждает пользователя о том, что они достигли конца слайдера. Если ответом является javascript, а не контент, обработчик MicrosoftMvcAjax выполняет его вместо замены содержимого DOM.

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult GetNextImage(...)
{
    if(Request.IsAjaxRequest())
    {
        if(CURRENT_IMAGE != LAST_IMAGE)
        {
            Image image = GetNextImage(...);
            var partialViewResult = new PartialViewResult();
            partialViewResult.ViewName = "ImageSlide";
            partialViewResult.ViewData.Model = image;
            return partialViewResult;
        }
        else
        {
            return JavaScript( "alert('No more images');" );
        }
    }

    return RedirectToAction("Error", "Home");
}

Конечно, вы, вероятно, захотите быть более креативными и использовать плагин диалога jQuery или что-то, а не предупреждение.

Ответ 3

Хорошо, у меня это есть.
Не решение моего вопроса, но решение этой проблемы все еще решается. Я просто не покажу ссылку "Далее", когда на экране отображается последнее изображение.

Не могу поверить, что я не думал об этом раньше...

Спасибо за ваши усилия ребятам