Как отметил Джастин, инкапсуляция является одним из основных принципов ООП. Вы хотели бы сохранить внутреннее представление данных в своем классе, скрытое снаружи, и предоставить одобренные способы просмотра / манипулирования им.
Свойства C # - это конструкции, которые обеспечивают простой способ сделать это. В вашем примере вы ничего не делаете внутри методов get
и set
, но в реальной жизни вам может понадобиться сделать некоторые вещи, такие как
В Java вы записываете геттеры и сеттеры, которые являются равными -old, которые возвращают или принимают значение соответственно.
Краткий ответ: Вы не можете передавать код 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>