【问题标题】:Evaluate string containing html and razor评估包含 html 和 razor 的字符串
【发布时间】:2014-06-21 17:34:22
【问题描述】:
所以基本上我有一个 html 代码,其中还可以包含一些剃须刀代码,例如 @Url.Action("Index", "Home"),当然我不想将 '@Url.Action("Index", "Home")' 呈现给用户,我希望它在渲染之前得到评估。可以以某种方式完成吗?
@Html.Raw(htmlValue) and htmlValue is razor html string
【问题讨论】:
标签:
html
asp.net-mvc
razor
【解决方案1】:
如果这是您所追求的,那么您无法在视图中评估此代码。问题是,此时您不再处于服务器的上下文中(这是需要执行此代码的位置)。
您需要先在服务器上评估此代码,然后将其传递到视图中(这有点违背 MVC 的目的),然后您可以使用 @Html.Raw 输出预渲染的内容。
【解决方案2】:
Url.Action("Index", "Home") 是一个返回字符串(url)的服务器端函数。
您有一个 cshtml 文件,它在“剃刀渲染过程”结束时返回 html。
在页面变成 html 之前,所有“服务器”内容都使用 razor 引擎呈现。
这意味着这一行:Url.Action("Index", "Home")
当它以纯 html 形式到达您的客户时实际上看起来像这样:
<yourserver>/Index/Home
您不能将 javascript 属性插入 Url.Action 函数,因为该函数在页面转换为 html 之前在服务器端进行评估。
您可以做的是使用 javascript 变量对服务器执行 ajax 调用,它可以使用 Url.Action 返回一个 url。
【解决方案3】:
它对您的问题很感兴趣并开始寻找解决方案。
我发现 RazorGenerator 似乎可以通过浏览非 ASP.NET 项目的 cshtml 文件来完成一些工作。
嗯,这不是很有趣,但是当您将其与运行时程序集的自定义生成/编译相结合时,您可能会有所收获。
我认为这仅在视图不根据每个请求更改时才可行,这意味着您会继续生成程序集。或者你必须为此想出一些聪明的办法。