在剃须刀上对 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>
假设我有这个简单的方法:
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>