можно легко передавать данные с точки зрения использования моделей вместо этих три.
Да, безусловно, вы можете и в таком случае ваш взгляд становится сильно типизированных вид, и вы можете видеть, начиная с вашей точки зрения имеет ряд
@Model entityName
Что делать, если вы не хотите (по некоторым причинам) ваше мнение строго типизировано. Как вы думаете, в таком случае вы собираетесь передавать данные для просмотра.
Это цель ViewData
или ViewBaG
или TempData
.
вид не должен знать модели контроллер выдает
Я думаю, что вы неправильно истолкованы эту линию, которая не может быть согласована. Если вашему представлению нужны данные для отображения в элементах управления (может быть вид редактирования), то откуда они будут получать данные, если они не знают, откуда их читать.
Вид каким-либо образом должен знать данные модели (либо в форме прямого прохождения объекта модели, либо с использованием любой из этих трех методов).
EDIT:
За ваш последний комментарий:
может я не использовать это?
public class TestModel
{
public dynamic testproperty { get; set; }
}
Да, наверное, можно, но это не правильный путь. Попробуйте создать строго типизированное представление с моделью как TestModel
и использовать любой шаблон леса и посмотреть, могут ли строительные леса создавать правильный шаблон.
Это не будет, поскольку строительные леса внутренне используют отражение, чтобы пройти через ваши свойства модели и соответственно создавать элементы управления для этих свойств/членов. Поскольку у вас есть динамическое свойство, оно не сможет отразить это свойство. измените тип на статический тип, например String
, и увидите, что он сгенерирует @Html.DisplayFor(modelItem => item.testproperty)
. Это вопрос.
Даже если вы не используете шаблон для строительных лесов и не создаете элементы управления рукой; какой тип управления вы создадите для своей собственности? так как это tped как dynamic
это может быть что угодно (string
, int
, datetime
, email
...).
ViewBag
или ViewData
- это техника управления состоянием, позволяющая передавать небольшое количество данных в виде представлений или контроллеров для просмотра. Вы всегда должны передавать свои данные как объект модели, чтобы ваше представление было правильно указано @SteveHarris.
Надеюсь, что это дает понять в некотором смысле.
Могу ли я не использовать это? 'public class TestModel { public dynamic testproperty {get; задавать; } } 'что я сделал с нашей, каждый взгляд привязан к модели. Хорошая вещь об этом подходе - если есть изменение имени, представление будет знать об этом. используя ViewBag, ViewData и TempData потребует, чтобы представление узнало имя ключа. –
Вид должен быть в курсе, если модель. Представление построено из данных в модели, представление передает данные в форме модели контроллеру. Контроллер принимает данные и применяет любую бизнес-логику, валидацию и т. Д. –
@ avatart0ph, см. Edit в ответ на разъяснение вашего комментария. – Rahul