Где хранить данные интерфейса обратной связи в ASP.NET MVC 2? - PullRequest
1 голос
/ 14 сентября 2010

Я действительно новичок в ASP.NET MVC и шаблоне MVC в целом.

Для контекста я сейчас использую .NET 4.0, MVC 2.

Я знаю, что MCV 2 имеет множество встроенных функций для:

  • проверка (как на стороне клиента, так и на стороне сервера, различными способами)

  • обработка ошибок (с помощью атрибутов и других методов)

Но что следует использовать, чтобы вернуть пользователю обратную связь, которая не является ни ошибкой, ни проверкой?

Например, у меня есть простая форма, которая возвращает CSV (используя myController.base.file () ) Если данные найдены.

Если данные не найдены, я хотел бы вернуть представление с моделью как есть, а также сообщение типа "данные не найдены, попробуйте другой диапазон дат"

Сейчас

Должно ли такое сообщение обратной связи храниться в самой модели? или

есть ли для этого более чистый механизм?

Для этого предназначен ModelStateDictionary?

UPDATE

просто чтобы уточнить. Я знаю, что может быть много способов сделать то, что я хочу, но как правильно это сделать MVC .

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

Ответы [ 4 ]

2 голосов
/ 15 сентября 2010

Я думаю, что то, что могло бы прояснить, - это идея ViewModel .За исключением самых простых сценариев, вы найдете более одного вида модели в вашем проекте.Они могут называться многими именами, но я считаю эти имена полезными:

Чистые доменные модели (Модели) Здесь у вас есть идеальное представление о нашей модели данных.

Модели приложений (ViewModels) Эти модели учитывают реалии отображения вашей доменной модели в представлении.Они содержат данные, конкретно необходимые для конкретного представления.Вполне приемлемо поместить что-то вроде сообщения о состоянии в такую ​​модель.

Я бы порекомендовал этот проницательный пост в блоге , который показывает, когда, почему и как использовать ViewModels.

Пример:

public class WidgetDataExportViewModel {
  public DateTime StartDate {get;set;}
  public DateTime EndDate {get;set;}
  public MyEnum SomeOtherProperty {get;set;}
  public string StatusMessage {get;set;}
  public IEnumerable<Widget> Widgets {get;set;}

}
1 голос
/ 15 сентября 2010

Ранее я успешно использовал ModelState.AddModelError для отображения сводного сообщения.Просто убедитесь, что вы используете ключ, который не является именем поля «Модель».

Примечание: я адаптировал свой дизайн из книги Стивена Сандерсона (см. Указатель на RulesException)

Удачи

1 голос
/ 15 сентября 2010

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

Если вы хотите иметь возможностьОбрабатывая системные сообщения в целом одинаково во всем приложении (например, с сообщением в верхней или боковой части окна), вы можете создать служебный метод, который помещает информацию в ViewData со специальным ключом, который может быть получен вашим приложением.главная страницаЕсли вместо этого вы используете TempData, сообщение может быть сохранено при перенаправлении.

1 голос
/ 14 сентября 2010

Ошибки проверки, напрямую связанные с действиями пользователя в вашей модели (например, слишком короткий пароль)
дома как можно ближе к модели.

Общие сообщения об ошибках типа «данные не найдены» легче обрабатываются благодаря наличию какого-либо выделенного вида ошибок.

<ч /> Добавлено:

Если я вас правильно понял, вы предпочитаете придерживаться одного взгляда; будь то проверка золота или сжигание SQL-серверов; -)

Не безумно, что MVC2 испытал mysef, но был последовательным и всегда создавал свои собственные модели, никогда не получая от вас то, что (не) ORM, который вы используете (Linq <-> SQL, EF), должно дать вам мелкозернистость тебе нужно.

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

<ч /> Я получил свой MVC в основном из книг, но блогосфера определенно начала выпускать золотой материал о более «чужих» частях ASP.NET MVC.
Мой настоящий ага момент относительно M MVC наступил во время чтения
Стив Микелотти *1023* ASP.NET MVC View Patterns Patterns (отличный источник информации для MVC2 по всему)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...