在剃须刀上对 Func<string,string> 的调用正在被 ToString 化而不是被执行

Call to Func<string,string> on razor is being ToString'ed instead of executed

假设我有这个简单的方法:

public string A ( string key )
{
    return "_" + key + "_";
}

在 class 的构造函数中,我这样说:

public Func<string, string> F;

public AClass( )
{
    F = A;
}

在控制器中我 return Func 是这样的:

var a = new AClass();
ViewBag.MyFunc= a.F;

但是,在视图中有这样的东西

@{
    var X = ViewBag.MyFunc;
}

// ...

<h1 class="whatever" style="float:left">@X ( "hello" )</h1>

意味着我在 F func 上得到了一个 ToString() 渲染,而不是我想看到的实际方法调用,所以我看到的不是上面愚蠢的函数 A 的输出,而是这个

System.Func`2[System.String,System.String] ( "hello" ) 

欢迎批评我为什么不应该这样做,但我在这里错过了什么?我想我对一些显而易见的事情视而不见。

谢谢

您需要删除 ( 之前的 space,以便 Razor 解析器意识到它是您的 @ 代码的一部分。

好像是间距的问题

尝试

<h1 class="whatever" style="float:left">@X("hello")</h1>

如果还是不行,试试这个:

<h1 class="whatever" style="float:left">@(X("hello"))</h1>