【问题标题】: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 文件来完成一些工作。

        嗯,这不是很有趣,但是当您将其与运行时程序集的自定义生成/编译相结合时,您可能会有所收获。

        我认为这仅在视图不根据每个请求更改时才可行,这意味着您会继续生成程序集。或者你必须为此想出一些聪明的办法。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-11-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多