Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 在razor-what';允许,在哪里记录_Asp.net_Asp.net Mvc_Razor_Asp.net Mvc 5_Asp.net Core Mvc - Fatal编程技术网

Asp.net 在razor-what';允许,在哪里记录

Asp.net 在razor-what';允许,在哪里记录,asp.net,asp.net-mvc,razor,asp.net-mvc-5,asp.net-core-mvc,Asp.net,Asp.net Mvc,Razor,Asp.net Mvc 5,Asp.net Core Mvc,我刚刚看到了Razor中最棒的功能,我完全错过了 你可以定义 public delegate IHtmlString RazorBlock(Object unknown); 还有一些功能 public static IHtmlString Foo(RazorBlock block) => block(null); 然后用一把剃须刀叫它: @( Helper.Foo(@<div>some text</div>) ) @( Foo(@some text)

我刚刚看到了Razor中最棒的功能,我完全错过了

你可以定义

public delegate IHtmlString RazorBlock(Object unknown);
还有一些功能

public static IHtmlString Foo(RazorBlock block) => block(null);
然后用一把剃须刀叫它:

@(
    Helper.Foo(@<div>some text</div>)
)
@(
Foo(@some text)
)
内部html实际上是方法
Foo
接收的内容

我一直认为lambda's不支持嵌套剃须刀。但事实确实如此。剃刀比我想象的要远

我唯一的问题是:

我在查看DevExtreme的ASP.NETMVC包装中的示例时发现了这个特性,
RazorBlock
的定义就来自于此

我不知道为什么
unknown
参数是必需的(尽管如此),也不知道如何从Razor代码段访问它

我不知道为什么未知参数是必需的(尽管如此),以及如何从Razor代码段访问它

通过查看编译后的Razor代码(可以在%windir%\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET文件下找到)很容易理解

例如,以下标记:

@functions{ 
    public delegate IHtmlString RazorBlock(Object unknown);

    static object Helper(RazorBlock block) {
        return null;
    }
}

@Helper(@<text>
    multi-line
    text
</text>)
@函数{
公共委托IHtmlString RazorBlock(对象未知);
静态对象辅助对象(RazorBlock块){
返回null;
}
}
@助手(@
多线
文本
)
生成此类:

public class _Page_Views_Home_Index_cshtml : System.Web.Mvc.WebViewPage<dynamic> {
    public delegate IHtmlString RazorBlock(Object unknown);

    static object Helper(RazorBlock block) {
        return null;
    }

    // . . .

    public override void Execute() {
        // . . .

        Write(Helper(item => new System.Web.WebPages.HelperResult(__razor_template_writer => {            
            BeginContext(__razor_template_writer, "~/Views/Home/Index.cshtml", 174, 28, true);
            WriteLiteralTo(__razor_template_writer, "\r\n    multi-line\r\n    text\r\n");
            EndContext(__razor_template_writer, "~/Views/Home/Index.cshtml", 174, 28, true);
        })));

        // . . .
    }
}
public class\u Page\u Views\u Home\u Index\u cshtml:System.Web.Mvc.WebViewPage{
公共委托IHtmlString RazorBlock(对象未知);
静态对象辅助对象(RazorBlock块){
返回null;
}
// . . .
公共覆盖无效执行(){
// . . .
Write(Helper(item=>newsystem.Web.WebPages.HelperResult(\uuuRazor\uTemplate\uWriter=>{
BeginContext(模板编写器,“~/Views/Home/Index.cshtml”,174,28,true);
Writeleteralto(\r\n razor\u template\u writer,“\r\n多行\r\n文本\r\n”);
EndContext(模板编写器,~/Views/Home/Index.cshtml),174,28,true);
})));
// . . .
}
}
编辑。您可以看到,
@
块被转换为
item=>HelperResult
lambdas。而
object=>IHtmlString
是与该代码兼容的最通用的代理签名