Краткий ответ:
Вы не можете передать 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 должно быть просто что-то вроде:
<!-- 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>