首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在字符串中包含Razor语法

在字符串中包含Razor语法
EN

Stack Overflow用户
提问于 2019-01-18 22:07:54
回答 1查看 377关注 0票数 0

我试图通过在控制器中构建html,然后在视图中呈现它来动态创建选项卡。它都可以工作,但对于选项卡内容,我希望它呈现一个操作。

我遇到的问题是@Html.RenderAction代码被解释为字符串,而不是Razor语法。

代码语言:javascript
运行
复制
 model.TabHtml = model.TabHtml + @"<h3>" + role.title + "</h3>";
 model.TabHtml = model.TabHtml + @"@Html.RenderAction(""Index"", ""Matrix"", new {id = " + role.id + "})" ;
 model.TabHtml = model.TabHtml + @"</div>";

有没有解决这个问题的办法,或者甚至是另一种方式呢?

它在我的视图中显示如下。view

EN

回答 1

Stack Overflow用户

发布于 2019-01-19 08:14:26

简而言之:您不能将Razor代码作为字符串从您的控制器传递到您的视图,因为它将被解释为变量的值,而不是要运行的代码。

冗长的回答:您的尝试显示了对ASP.NET MVC框架的严重误解。它是基于MVC模式构建的,用于Model View Controller。虽然可以编写不严格遵循该模式的代码,但您的示例显示了一种简单地错误解释该模式的方法。视图负责HTML的构建,而不是控制器。控制器正在选择正确的视图,并将模型中的正确数据传递给它。你应该在这方面重新定义你的问题。

更具体地说: View的目标是构造可以发送回客户端的HTML。视图是.cshtml文件,即Razor文件。Razor是一种非常接近C#语法的语言,它可以与超文本标记语言混合使用,并用于构建超文本标记语言。视图还不是HTML!

让我们举个例子:控制器传递给视图的数据可以是一个List<string>,你的Razor代码可以用下面的方式为你的List中的每个string生成一个新的HTML段落:

代码语言:javascript
运行
复制
@foreach(string s in ListOfString)
{
    <p>s</p>
}

需要运行此Razor代码,生成的HTML将为:

代码语言:javascript
运行
复制
<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解析器来说是简单的值,而不是要解析的代码。这就解释了为什么这段代码会显示在您的页面上:它永远不会被解析为代码。

因为它不是超文本标记语言,所以客户端浏览器也无法解释它,只有基于Razor的服务器能够解释ASP.NET代码。

使用该模式的正确方法是:

在控制器中:

代码语言:javascript
运行
复制
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文件中的视图应该类似于:

代码语言:javascript
运行
复制
<!-- 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>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54255674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档