ViewBag в представлении без @

#c# #asp.net-mvc

#c# #asp.net-mvc

Вопрос:

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

 @{
    string urlFilter = Url.Action("Index", "Home", new
    {
        CustID = ViewBag.custid,
        Errors = ViewBag.errors
    });}
  

Это выглядит как часть кода c # в представлении. Я знаю, что razor synthax позволяет нам вводить код c # в представление, но не понимаю, какой смысл использовать ViewBag без @ in View

Ответ №1:

В данном случае это связано с тем, что он находится в пределах блока кода C # ( @{ ... } ), а не в разметке HTML.

Однако, если вы пытались ссылаться на ViewBag, встроенный в HTML-блок, вам нужно будет добавить к нему префикс, @ чтобы убедиться, что он был обработан движком Razor.

например:

 <p>@ViewBag.Name</p>
  

ViewBag является динамическим свойством WebPageView , из которого выводится представление.

Вы можете узнать о синтаксисе Razor здесь: https://learn.microsoft.com/en-us/aspnet/web-pages/overview/getting-started/introducing-razor-syntax-c

Комментарии:

1. Итак, вместо создания ViewBag в контроллере я могу создать его в представлении, и он работает так же, как если бы я создал ViewBag в контроллере? Я думаю, я все еще не понимаю, почему мы вводим такой код (ViewBag.custid и т. Д.) В View вместо контроллера

2. @Muska обычно вы устанавливаете значения ViewBag в контроллере, а затем ссылаетесь на них в представлении. Вам не нужно создавать ViewBag самостоятельно. С помощью MVC framework ViewBag , на который вы можете ссылаться в контроллере, и установленные значения будут такими же, как то, на что вы можете ссылаться из блоков кода Razor для представления, отображаемого в результате с помощью этого контроллера.