2011-01-14 3 views
3

Я попытался проверить лучшие практики использования asp.net mvc, и многие говорят, что мы никогда не должны использовать ViewData. Я прочитал это post, и кажется, что это от этого.Должен ли ViewData никогда не использоваться?

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

В каких случаях следует использовать ViewData? Каковы наилучшие практики при использовании ViewData, чтобы они не использовались неправильно?

ответ

3

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

Никогда не было одного правила для всех ситуаций, но это, как правило, первый подход, который я принимаю.

Kindness

D

+0

самих магических струн можно избежать, имея постоянные струны .. просто говоря .. – Baz1nga

0

Цитата Scot Gu (ссылка на источник: nerddinnerbook)

Использование строк на основе словарей, так как опечаток, может привести к ошибкам, которые не будут быть пойманный во время компиляции. непечатаемый словарь ViewData также требует использования оператора «как» или при использовании строго типизированного языка , такого как C#, в шаблоне просмотра.

0

Использование строго типизированных ViewPages в паре с сильно типизированной моделью или ModelView является совершенной практикой ASP.NET MVC.

Вы можете использовать ViewData для передачи дополнительных данных ViewPage но preffer ViewModels потому что:

  1. ошибок во время компиляции против ошибок во время выполнения
  2. поддержка IntellySence
  3. Легко рефакторинга
  4. Нет волшебных строк
  5. Html хелпер для построения формы с привязкой данных
0

Я часто использую ViewData, когда мне нужно добавить данные к текущему запросу через некоторый базовый контроллер или фильтр. Обычно мастер-страницы будут иметь динамический контент, который должен быть получен с сервера, и вместо того, чтобы модифицировать модель, возвращаемую представлением, или обертывать каждую модель, возвращенную в родительском ViewModel, я могу просто разместить дополнительные данные в ViewData.

Во избежание использования строк в моих представлениях я часто помещаю поле const в класс контроллера или подобное, и вызывается поле в представлении.

public abstract partial class BaseController : Controller 
{ 
    public const string MessagesViewDataKey = "Base.Messages"; 

    protected override void OnActionExecuted(ActionExecutedContext filterContext) { 
     if (filterContext != null && filterContext.Controller != null && !filterContext.IsChildAction) { 
      filterContext.Controller.ViewData[MessagesViewDataKey] = Messenger.MessageQueues; 
     } 

     base.OnActionExecuted(filterContext); 
    } 
} 

// site.master 
<% if (ViewData[BaseController.MessagesViewDataKey] != null) 
      Html.RenderPartial("DisplayTemplates/MessageList", ViewData[BaseController.MessagesViewDataKey]); %> 
0

Я не люблю использовать их, но я нашел, что они полезны в ситуации, когда я хочу, чтобы отобразить какое-то сообщение пользователя на всех страницах.Например, у меня есть пользовательский элемент управления, который отображает сообщения пользователю. Он также присутствует на моей главной странице. Он проверяет ViewData["messages"] и TempData["messages"] И если один из них не является нулевым, он отображает сообщения, которые присутствуют. Если они оба равны нулю, это не так.

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

 Смежные вопросы

  • Нет связанных вопросов^_^