Что делать, когда нужна строгая типизация с двумя типами - PullRequest
1 голос
/ 28 февраля 2012

Я довольно новичок в mvc, и, когда я разрабатываю какое-то блогоподобное веб-приложение, я хочу узнать одну вещь из более опытного.Проблема в том, что у меня есть вид статьи в блоге и поле для ввода комментариев к ней.Идеальным, абстрактным решением было бы строго напечатать это представление с помощью класса и статьи, и комментария, но, как мы знаем, это невозможно.Что будет лучшим способом справиться с этим делом?Поскольку это View of article, это должно быть напечатано с классом article.С другой стороны - будет проще набрать его с помощью класса комментариев и передать поля статьи с помощью ViewBag.Я не нахожу это правильным, так как логически это не должно быть набрано с классом, который здесь не представлен напрямую (статья является основным).

Каковы другие возможные решения для добавления и проверки комментариевлегко и понятно?Заранее спасибо.

Редактировать: Основная «проблема» не в том, чтобы обработать список существующих комментариев, а в том, чтобы добавить новый - можно ли легко использовать с ViewModel FormCollection в этом случае на контроллересторона

Ответы [ 5 ]

6 голосов
/ 28 февраля 2012

В этом случае вы используете ViewModel.Примерно так:

public class Article
{
    public string Text { get; set; }
}

public class Comment
{
    public string Text { get; set; }
}

public class BlogPostViewModel
{
    public Article Article { get; set; }
    public IEnumerable<Comment> Comments { get; set; }
}

ViewModel : связующий объект между моделью домена (или моделями) [в вашем случае Comment и Article] и View [в вашемcase, ваш пост в блоге].

Ваш вид будет выглядеть примерно так:

@model BlogPostViewModel

@* you can reference Model.Article, as well as Model.Comments here *@

Вот хороший рабочий пример ASP.NET MVC View Patterns Patterns .

Редактировать : и затем метод действия для получения данных POST:

[HttpPost]
public ActionResult YourBlogView(BlogPostViewModel bpvm)
{
    // here you have access to the binded model
    // i.e. bpvm.Article
}
2 голосов
/ 28 февраля 2012

Используйте новую модель:

public class ArticleAndCommentsModel {
    public ArticleModel Article { get; set; }
    public IEnumerable<CommentModel> Comments { get; set; }
}

Ваш взгляд унаследует ViewPage<ArticleAndCommentsModel>.

2 голосов
/ 28 февраля 2012

Идеальным, абстрактным решением было бы строго напечатать это представление с помощью класса как статьи, так и комментария, но, как мы знаем, это невозможно.

Но это возможно.И это называется ViewModel.

Вы, кажется, немного зациклены на модели CRUD.Это выглядит мейнстримом, но это потому, что это единственный подход, который позволяет генерировать код и создавать шаблоны.

Чтобы получить лучшую перспективу, взгляните на AccountModels в стандартных шаблонах MVC.

0 голосов
/ 28 февраля 2012

Альтернативой ViewModel подходу, предложенному другими, было бы поместить Article в ViewBag и ссылаться на него оттуда, и пусть Comment будет моделью страницы.Это предполагает, что пользователь не изменяет статью.

0 голосов
/ 28 февраля 2012

Я вижу два варианта

  1. Создание модели представления со статьей и коллекцией комментариев
  2. Визуализация раздела комментариев в виде отдельного представления (на той же странице)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...