微软的WebMatrix中内置了Razor开发,虽然为开发Razor提供了很多简便,也带了些许不便,例如,无法在cshtml文件中自定义方法等。想了很多办法,发现@helper能帮我们实现类似自定义方法的功能。
如下代码:
@{
Page.Str = "Hello";
Test();
@Page.Str
}
@helper Test()
{
Page.Str = "World";
}
输出的结果是什么“World”?错了,实际结果仍然是“Hello”!
原来我们调用的“Test();”其实并不是我们定义的那个@helper Test(),执行Test()之后,返回的只是一个HelperResult对象,调用该对象的ToString或者ToHtmlString、WriteTo方法的时候,才会执行我们在helper中定义的那个lambda表达式。平时由于我们常用@Test()的方式,其实是隐性的调用了ToString()方法,故不会看到“调用了方法却得不到执行结果”的现象。