我正在使用Razor视图与asp mvc预览3
我正在尝试创建一些我想直接在视图中可用的方法。这些不是真正的Html帮助方法,所以我不认为扩展HtmlHelper是有道理的吗?
@HelloWorld(); vs @Html.HelloWorld()
我可以通过在HtmlHelper上创建一个扩展方法来让Html.HelloWorld工作
public static class HtmlExtensions { public static string HelloWorld(this HtmlHelper helper) { return "Hello"; } }
我想做同样的事情,但是为了这个观点;我的问题 – 视图是什么类型的对象?
@functions { public string HelloWorld() { return "Hello"; } } @HelloWorld() @* now this works *@
然后我试图把这个代码我的_viewstart.cshtml文件认为它可以在所有的视图,但它不是
如果我知道哪种类型的视图是我认为可以轻松扩展,任何帮助赞赏
解决方法
事实证明,asp运行时将在运行时定义Execute方法,因此自定义视图基类也必须是抽象的
using System; using System.Web.Mvc; namespace MyMvcWebApp.Extensions { public abstract class ViewBase<TModel> : System.Web.Mvc.WebViewPage<TModel> where TModel : class { // now this will be available in any view @HelloWorld() public string HelloWorld() { return "Hello from the ViewBase class"; } } }
这应该使用强类型的视图,它看起来像剃刀所有的视图是强类型的,当你没有定义类型’动态’被使用,这是强类型
同样,当ClickTricity声明你然后更新web.config(在视图目录下的一个)
<pages pageBaseType="MyMvcWebApp.Extensions.ViewBase">