Разделение данных модели MVC3 - PullRequest
3 голосов
/ 29 февраля 2012

Я заметил, что многие поля, которые я добавляю в свои представления, являются логикой управления:

@if (Model.IsAdmin) {
  <p>You're an admin</p>
}

Мое понимание того, как должен работать MVC, заключается в том, что то, что входит в модель, должно действовать гораздо больше как данные, они возвращаются, если это форма, это для пользователя, чтобы видеть / изменять и т. Д.

Является ли использование логики управления плохой практикой? Каково соглашение для передачи логики управления представлению в MVC?

Ответы [ 5 ]

4 голосов
/ 29 февраля 2012

Является ли использование логики управления в представлении плохой практикой?

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

1 голос
/ 29 февраля 2012

Вы можете добавить это в контроллер, если хотите.

if(user.IsAdmin)
   ViewBag.WelcomeMessage = "You are an admin";
else
   ViewBag.WelcomeMessage = "You are a user";
1 голос
/ 29 февраля 2012

Этот конкретный пример мне подходит, вы представляете (домен view ) свои данные (домен model ), и то, что вы получаете, основано на данных, которые вы Получать.

Типичным эмпирическим правилом является, если оно сложнее, чем условие 1-2 @if, разделите его на другие, более специализированные виды (или используйте специализированные частичные виды), но на самом деле вы никогда не увидите виды с отсутствует управление потоком данных в проекте MVC (даже не только в реализации ASP.NET).

1 голос
/ 29 февраля 2012

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

Контроллер Логика

if(IsAdmin)
    return View('AdminPage')
else 
    return View('UserPage')

Идея состоит в том, чтобы ваши взгляды были сосредоточены только на отображении данных, предоставленных им, и позволяя логике быть разделенной на фон (контроллер).

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

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

Вероятно, вы должны использовать роли для авторизации, а не устанавливать свойства.как это.Примерно так:

@if(User.IsInRole("Admin")) {
    <p>You're an Admin!</p>
}

Если хотите, вы можете инкапсулировать это в Razor helper или создать Html помощник, чтобы сделать его чище (если вы используете его во многих местах)

...