asp.net - 如何将 HTML 片段(作为委托(delegate)?)传递给声明性 Razor Helper?

标签 asp.net asp.net-mvc razor razor-declarative-helpers

我一直在写一些声明Razor Helpers (使用@helper 语法)用于Umbraco 4.7它现在支持 Razor View 引擎(尽管我想这同样适用于 WebMatrix 或 ASP.NET MVC)。他们都工作正常。但是,我想让它们更灵活一点,以便我可以将一个 HTML 片段传递给它们,该片段可以“包装”在输出周围(但仅在有输出时)。例如,我有一个助手(这里非常简化),它可以从一些参数生成一个 HTML 链接:

@helper HtmlLink(string url, string text = null, string title = null, 
string cssClass = null, bool newWindow = false)
{
    if (!String.IsNullOrEmpty(url))
    {
        System.Web.Mvc.TagBuilder linkTag = new System.Web.Mvc.TagBuilder("a");

        linkTag.Attributes.Add("href", url);
        linkTag.SetInnerText(text ?? url);

        if (!String.IsNullOrEmpty(title))
        {
            linkTag.Attributes.Add("title", title);
        }

        if (!String.IsNullOrEmpty(cssClass))
        {
            linkTag.Attributes.Add("class", cssClass);
        }

        if (newWindow)
        {
            linkTag.Attributes.Add("rel", "external");
        }

        @Html.Raw(linkTag.ToString())
    }
}

调用@LinkHelper.HtmlLink("http://www.google.com/", "Google")将生成 HTML 输出 <a href="http://www.google.com/">Google</a> .

不过,如果我可以选择传入一个 HTML 片段,只要 URL 有值,该片段就会包裹在生成的超链接 HTML 周围,这将是一件好事。我基本上希望能够做这样的事情:
@LinkHelper.HtmlLink("http://www.google.com/", "Google", @<li>@link</li>)

并获得输出
<li><a href="http://www.google.com/">Google</a></li>

@LinkHelper.HtmlLink("", "", @<li>@link</li>)
并且根本没有输出。

我在 Phil Haacked 的博客中读到了 Templated Razor Delegates但无法掌握如何在这种情况下使用它们 - 如果确实有可能的话。我觉得我错过了一些东西或在错误的树上吠叫。

最佳答案

我认为问题在于 @link .模板化 razor 代理使用“魔术”参数 @item 获取数据.尝试替换 @link@item在您的模板中。

另外,发布执行模板的代码 - 你的 HtmlLink采用 Func<dynamic, object> 的方法.

关于asp.net - 如何将 HTML 片段(作为委托(delegate)?)传递给声明性 Razor Helper?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7040841/

相关文章:

c# - 如何在没有 com 库的情况下读写二进制 excel 文件

c# - 异步上传和调整多个图像时出现内存不足异常

javascript - 用户从 DropDownListFor 中选择值后禁用 TextBoxFor

asp.net-mvc - 带有错误的 Razor 语法在不应该编译时进行编译

javascript - 转换后的 razor 模型为 JS 对象属性为 null

c# - 带和不带 .aspx 扩展名的链接

c# - .NET Core 2 中间件解决方案中的 ClaimsIdentity 问题

javascript - 打开自定义协议(protocol)后关闭浏览器窗口

asp.net-mvc - 基本 Controller 中的 ASP.NET 重定向

asp.net-mvc - 从 app_data 删除 .mdf 文件导致异常无法将文件附加为数据库