当前位置:  开发笔记 > 后端 > 正文

ASP MVC Razor视图扩展方法,如何创建'全局'视图方法?

如何解决《ASPMVCRazor视图扩展方法,如何创建'全局'视图方法?》经验,为你挑选了2个好方法。

我正在使用带有asp mvc预览3的Razor视图

我正在尝试创建一些我希望直接在视图中可用的方法.这些不是真正的Html辅助方法,所以我不认为扩展HtmlHelper有意义吗?

我的目标,能够在视图中调用方法即

@HelloWorld(); vs @Html.HelloWorld()

我可以通过在HtmlHelper上创建扩展方法来使Html.HelloWorld工作

public static class HtmlExtensions
{
    public static string HelloWorld(this HtmlHelper helper)
    {
        return "Hello";
    }
}

我想做同样的事情但是为了观点; 我的问题 - 视图是什么类型的对象?

注意:我可以通过在.cshtml页面中定义方法来实现此功能

@functions 
{
    public string HelloWorld()
    {
        return "Hello";
    }
}

@HelloWorld() @* now this works *@

然后我试着把这个代码放在我的_viewstart.cshtml文件中,认为它可以在所有视图中使用,但事实并非如此

如果我知道视图是哪种类型我认为它可以很容易地扩展,任何帮助表示赞赏



1> house9..:

事实证明,asp运行时将在运行时定义Execute方法,因此自定义视图基类也必须是抽象的

using System;
using System.Web.Mvc;

namespace MyMvcWebApp.Extensions
{
    public abstract class ViewBase
        : System.Web.Mvc.WebViewPage where TModel : class
    {
        // now this will be available in any view @HelloWorld()
        public string HelloWorld()
        {
            return "Hello from the ViewBase class";
        }
    }
}

这应该适用于强类型视图,它看起来像剃刀所有视图都是强类型的,当你没有定义类型'动态'使用,这是强类型

另外,正如Clicktricity所述,然后更新web.config(Views目录下的那个)



实际上,我完全不同意诺埃尔亚伯拉罕 - 正是这种情况发明了延伸方法.上面给出的解决方案意味着您需要在每个要使用它的Web应用程序中进行配置更改.此外,使用扩展方法使其成为想要使用它的Views的"拉"用法,而通过更改基类强制每个View继承它是否需要它.

2> Rob Kent..:

正如其他人所说,Razor Views最终都继承自WebViewPage:

public abstract class WebViewPage : WebViewPage

因此,您可以简单地为WebViewPage编写扩展方法,而无需创建新的基类或更改配置文件,这已由其他答案建议.例如:

public static class WebViewPageExtensions
{
    public static string HollowWorld(this WebViewPage wvp)
    {
        return "Memento mori";
    }
}

将该命名空间的using语句添加到View中,然后:

@this.HollowWorld()

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有