Включить синтаксис Razor в строку

Как отметил Джастин, инкапсуляция является одним из основных принципов ООП. Вы хотели бы сохранить внутреннее представление данных в своем классе, скрытое снаружи, и предоставить одобренные способы просмотра / манипулирования им.

Свойства C # - это конструкции, которые обеспечивают простой способ сделать это. В вашем примере вы ничего не делаете внутри методов get и set, но в реальной жизни вам может понадобиться сделать некоторые вещи, такие как

  • Сохранить валюту в 10-м центах как long integer, но вернемся к внешнему миру как строка с 2 десятичными пробелами и знаком $.
  • Ограничьте определенное свойство, которое должно быть доступно только для чтения (или даже только для записи: для ex :, пароль validator / heh generator class).
  • Измените состояние объекта как-то, когда это значение установлено / get.

В Java вы записываете геттеры и сеттеры, которые являются равными -old, которые возвращают или принимают значение соответственно.

0
задан Jason Davidson 18 January 2019 в 14:47
поделиться

1 ответ

Краткий ответ: Вы не можете передавать код Razor в виде строки из вашего контроллера в View, поскольку он будет интерпретироваться как значение переменной, но не как код, который нужно запустить.

Длинный ответ: Ваша попытка показывает серьезное недопонимание ASP.NET MVC Framework. Он построен на основе шаблона MVC для Model View Controller. Хотя можно написать код, который строго не следует шаблону, в вашем примере показан способ, который просто неверно интерпретирует шаблон. Вид отвечает за построение вашего HTML, а не контроллера. Контроллер выбирает правильный вид и передает ему правильные данные из модели. Вы должны пересмотреть свою проблему в этом отношении.

Более конкретно: цель View - создать HTML, который можно отправить обратно клиенту. Представление представляет собой файл .cshtml, то есть файл Razor. Razor - это язык, очень близкий к синтаксису C #, который можно смешивать с HTML и использовать для сборки HTML. Представление - это еще не HTML!

Давайте рассмотрим пример: данные, передаваемые контроллером в представление, могут быть List<string>, и ваш код Razor может генерировать новый абзац HTML для каждого string в ваш List следующим образом:

@foreach(string s in ListOfString)
{
    <p>s</p>
}

Этот код Razor должен быть запущен, и в результате HTML должен быть:

<p>content of the first string</p>
<p>content of the second string</p>
<p>content of the third string</p>
<p>content of the fourth string</p>

Обратите внимание, что содержимое строк простые значения для анализатора Razor, а не код для анализа. Это объясняет, почему этот код отображается на вашей странице: он никогда не будет анализироваться как код.

Так как это не HTML, он также не будет интерпретироваться клиентским браузером, только сервер на основе ASP.NET MVC способен интерпретировать код Razor.

Правильный способ использования шаблона будет выглядеть следующим образом:

В контроллере:

public IActionResult Foo()
{
    // Construct your data from Model here, and store it in a variable Bar of type MyType.
    Mytype Bar = SomeComputing(MyModel);
    // For instance Bar could have properties called Prop1, Prop2, Prop3, etc...
    return(Bar);
}

и представление в файле Foo.cshtml должно выглядеть примерно так: [ 1116]

<!-- using the Bar data from the Controller -->
@model MyType 

<div class="@Model.Prop1">
    <h3>@Model.Prop2</h3>
    <p>@Model.Prop3</p>
    <a href="@Model.Prop4">Link</a>
</div>
0
ответ дан Laurent Gabiot 18 January 2019 в 14:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: