【问题标题】:How can I return razor markup from a helper?如何从助手返回剃刀标记?
【发布时间】:2012-05-24 12:41:16
【问题描述】:

最近我写了一个 javascript 库来减少我正在做的复制粘贴的数量。我觉得任何时候我复制粘贴代码都有机会使其通用,以便我可以重复使用它。

在制作我的库时,我想在 .cshtml 视图中使用它。所以,我使用了脚本链接和 vuala,它是可用的。但是,Visual Studio 2010 的 IntelliSense 并没有真正提供帮助。事实上,它显示的只是常规的 javascript 选项。

我着手让 IntelliSense 与我的库一起工作。经过高低搜索I figured it out(感谢@SLaks)。 js IntelliSense 问题的链接答案是用剃刀 @if(false){<script>} 包围脚本链接,以便让 IntelliSense 与该视图中的链接脚本一起工作。

所以,我想,

Visual Studio 2010 for razor 中的所有脚本链接都应该被这个标记包围吗?

@if (false)
{
 <script src="/Scripts/r.js" type="text/javascript"></script>
}else{
 <script src="@Url.Content("~/Scripts/r.js")" type="text/javascript"></script>
}

对我来说看起来不错,所以我开始合并它才发现我又在复制粘贴。我想我可以制作一个“简单”的助手来使用,也许是@Html.Script(source)。不幸的是,我不确定如何从助手返回剃刀标记。

我试过了:

    public static void Script(
this HtmlHelper html, string source)
    {
        html.ViewContext.Writer.Write("@if(false){}else{}");
    }

但它只是将字符串写到屏幕上:(

如何从助手返回剃刀标记?或者,我是否可以使用另一个过程来完成使其可重复使用?

【问题讨论】:

  • 您不需要返回 Razor 标记,只需返回一个字符串 - 脚本标记!
  • @asawyer - 但是它不会触发 IntelliSense 的解决方法
  • 噢,我明白你在问什么。不,这是对 Visual Studio 的 javascript intellisense 的一个令人讨厌的限制,但总比没有好。
  • @asawyer - 事实上,我想我有一个解决方案:)。如果它有效,我会将其作为我的答案发布,以便其他人希望不会将头撞到我撞到的同一堵墙上:)。它涉及使用局部视图来动态包含脚本。
  • @asawyer - 唉,我得到了部分视图(从助手调用),希望我可以在其他地方重用代码,因为它没有完成我所希望的。尽管链接脚本可用,但没有 IntelliSense,因为该脚本仅在运行时可用。悲伤的脸。

标签: asp.net-mvc-3 razor helper javascript-intellisense


【解决方案1】:

您不能渲染在帮助程序中生成的 Razor 标记。 razor 引擎首先解析 razor 代码,然后执行帮助程序。 Helper 的结果只能用于生成 html 标记。

【讨论】:

    猜你喜欢
    • 2019-08-01
    • 2018-05-19
    • 2013-10-03
    • 2015-08-01
    • 2011-05-07
    • 2020-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多