Можете ли вы использовать точечную запись с ViewData в Razor Pages? - PullRequest
3 голосов
/ 07 марта 2020

Я использую Razor Pages и пытаюсь получить доступ к свойству из ViewData:

@{
    ViewData["Property"] = "Value";
}

Я знаю, что это работает:

<h1>@ViewData["Property"]

Однако приложение вылетает, когда я попробуйте получить к нему доступ с точечной нотацией:

<h1>@ViewData.Property</h1>

Почему это происходит?

Я знаю, что точечная нотация работает с ViewBag, поскольку она позволяет динамически обращаться к свойствам.

Ответы [ 2 ]

1 голос
/ 07 марта 2020

ViewData - это объект типа ViewDataDictionary, который на самом деле IDictionary<string,object>, а ViewBag равен dynamic. dynamic позволяет использовать точечную запись, в то время как словарь в C# позволяет получать значения только через [key], поэтому ваше приложение вылетает из-за отсутствия такого свойства Property в ViewDataDictionary, даже если такой ключ существует.

0 голосов
/ 07 марта 2020

ViewData - это IDictionary, что означает, что вы можете получить доступ к данным с помощью ключа (ViewData [yourkey]). Но ваше беспокойство также справедливо, мы хотим получить доступ к свойству, чтобы мы могли снизить риск того, что некоторые товарищи по команде неправильно введут ключ.

И по этой причине я всегда предпочитаю использовать @ Model.YourProperty. Тогда следующий вопрос, если у вас есть общее используемое поле для всех страниц, таких как Languague, LoginName, ... Тогда я предлагаю иметь базовую модель, которая будет содержать все эти свойства. И все модели страниц должны наследовать / реализовывать эти свойства.

...