Я пытаюсь добавить форму, чтобы пользователи могли комментировать сообщения в моем приложении для ведения блогов.Пока что я добавил форму в представление сведений о сообщении и могу отправлять комментарии, правильно добавляя их в свою базу данных.Однако у меня есть проблема с отображением ошибок проверки пользователю.Форма комментария содержится в частичном представлении и отображается с использованием Html.RenderAction
в представлении сведений о сообщении.Я хотел бы подчеркнуть, что я не хочу использовать AJAX для этого, поскольку я хотел бы подойти к этому с точки зрения прогрессивного улучшения.
Вот соответствующее действие публикации:
[HttpPost, Authorize]
public ActionResult AddComment(CommentViewModel newComment)
{
if (ModelState.IsValid)
{
Comment comment = new Comment(_userRepository.GetByUsername(User.Identity.Name));
Mapper.Map(newComment, comment);
_commentRepository.Add(comment);
_postsRepository.CommentAdded(comment.Article);
return RedirectToAction("Index", new { id = newComment.PostID });
}
// What do I do here?
}
Я пробовал несколько способов возврата представлений здесь, но моя проблема еще больше усложняется проверкой некоторых параметров контроллера, которую я выполняю в родительском действии:
//
// GET: /Posts/5/this-is-a-slug
public ActionResult Index(int id, string slug)
{
PostViewModel viewModel = new PostViewModel();
var model = _postsRepository.GetByID(id);
if (model != null)
{
if (slug == null || slug.CompareTo(model.Slug) != 0)
{
return RedirectToActionPermanent("Index", new { id, slug = model.Slug });
}
else
{
_postsRepository.PostVisited(model);
Mapper.Map(model, viewModel);
viewModel.AuthorName = _userRepository.GetById(model.AuthorID);
}
}
return View(viewModel);
}
Это действие в основном имитируеткак работают URL-адреса SO.Если указан идентификатор сообщения, оно извлекается из базы данных вместе со слагом, который создается при создании сообщения.Если слаг в URL не совпадает с тем, который содержится в базе данных, он перенаправляется для включения слага.Это работает хорошо, но это означает, что у меня возникают проблемы при попытке заполнить мою родительскую модель представления, а именно:
public class PostViewModel
{
public int PostID { get; set; }
public string Title { get; set; }
public string Body { get; set; }
public string Slug { get; set; }
public DateTime DatePublished { get; set; }
public int NumberOfComments { get; set; }
public int AuthorID { get; set; }
public string AuthorName { get; set; }
public List<CommentViewModel> Comments { get; set; }
public CommentViewModel NewComment { get; set; }
}
Я надеялся, что это сработает, это заполнение PostViewModel.NewComment
, тест на просмотресли он имеет данные, а затем использует их для отображения ошибок модели.К сожалению, я заблудился относительно того, как этого добиться. Этот вопрос помог мне сформировать свой подход, но он не совсем ответил на мою проблему.
Может ли кто-нибудь мягко подтолкнуть меня в правильном направлении?Если мой подход кажется необоснованным, я хотел бы выяснить, почему и каким будет потенциальное решение проблемы.
Большое спасибо заранее.