Наилучшая практика для возврата ответа из частичного представления

StackOverflow https://stackoverflow.com/questions/1876280

  •  18-09-2019
  •  | 
  •  

Вопрос

Я пишу простую платформу для ведения блога с использованием ASP.NET MVC.Мой вопрос касается форм, содержащихся в частичных представлениях, и обработки ответа, ошибок проверки или успеха от контроллера.

У меня есть представление элемента записи в блоге, которое имеет связанный контроллер, который возвращает запись для заданного URL.В это представление встроено частичное представление, содержащее форму для отправки комментариев к сообщению.Форма частичного просмотра отправляется на отдельный контроллер, который обрабатывает добавление комментариев.Внутри действия добавить комментарий я выполняю проверку и добавляю ошибки в объект ModelState.

Проблема в том, что я должен вернуть RedirectResult при действии частичного просмотра, чтобы пользователь был возвращен к исходному элементу post , что означает, что я теряю объект ModelState или любые сообщения об успешном завершении, которые я хочу вернуть.

Я видел, как люди упоминали использование TempData для передачи информации о проверке или успешном завершении обратно в исходное представление, но для меня это звучит немного по-хакерски.Действительно ли это решение?Если да, то может ли кто-нибудь порекомендовать хороший пример его использования?Если нет, является ли это признаком более серьезных проблем в выбранной мной архитектуре?

Это было полезно?

Решение

В прошлом я использовал шаблон PRG, попробуйте

Используйте шаблон PRG для изменения данных

Другие советы

Вы можете заставить действие добавить комментарий вызвать действие просмотреть публикацию...

Что-то вроде этого, я думаю:

public class PostController
{
    ... blah ...

    public ActionResult ViewPost(int postId)
    {
        Post post = PostRepository.GetPost(postId);
        return View("ViewPost", post);
    }

    public ActionResult AddComment(int postId, string comment, string otherInfo)
    {
        //Validate stuff, setting modelstate etc

        //If it isn't valid, return the same post view (modelstate will stay)
        if (!ModelState.IsValid)
            return this.ViewPost(postId);

        //If it is valid then we want to save it and follow PRG pattern
        PostRepository.Save(newValidComment);
        TempData["Message"] = "Thanks for your comment!";
        return RedirectToAction("ViewPost", new {id = postId});
    }
}

Или вариация той же концепции...

ХТХС,
Чарльз

Рассматривали ли вы возможность использования библиотек Ajax просто для публикации этой области страницы?Таким образом, вам не нужно было бы перенаправлять.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top