/ / Найкраща практика повернення відповіді з часткового подання - asp.net-mvc, часткове представлення

Найкраща практика повернення відповіді з часткового перегляду - asp.net-mvc, частковий перегляд

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

У мене є перегляд елемента повідомлення в блозі, який маєпов'язаний контролер, який повертає публікацію для заданої URL-адреси. У цьому поданні вбудовано частковий вигляд, що містить форму для подання коментарів до публікації. Форма часткового подання подається окремому контролеру, який обробляє додавання коментарів. Усередині дії додавання коментаря я виконую перевірку та додаю помилки до об'єкта ModelState.

Проблема в тому, що я повинен повернути aRedirectResult для дії часткового перегляду, щоб користувач повернувся до вихідного елемента повідомлення, що означає, що я втрачаю об'єкт ModelState або будь-які повідомлення про успіх, які я хочу повернути.

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

Відповіді:

3 для відповіді № 1

Раніше я використовував шаблон PRG, спробуйте

Використовуйте шаблон PRG для модифікації даних


1 для відповіді № 2

Ви можете додати дію додавання коментарів до виклику дії перегляду публікації ...

Я думаю, щось подібне до цього:

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});
}
}

Або варіація тієї ж концепції ...

HTHs
Чарльз


0 для відповіді № 3

Ви роздумували про те, щоб використовувати бібліотеки Ajax, щоб просто опублікувати цю область сторінки? Таким чином вам не потрібно буде переспрямовувати.