全局函数在Razor视图引擎中

4

我希望在Razor视图引擎中拥有一个全局方法,类似于w,用于本地化我的MVC应用程序。我尝试过

@functions{
    public string w(string message)
    {
        return VCBox.Helpers.Localization.w(message);
    }
}

但是我应该在每个 Razor 页面上都需要这个,而我不想这样。我想知道如何拥有一个全局函数,可以在我的项目的每个页面中使用?

2个回答

2
你可以扩展HtmlHelper:
扩展:
public static class HtmlHelperExtensions
{
    public static MvcHtmlString W(this HtmlHelper htmlHelper, string message)
    {
        return VCBox.Helpers.Localization.w(message);
    }
}

Cshtml:

@Html.W("message")

难道没有只有 w 方法的方式吗? - ahmadali shafiee
@ahmadalishafiee 如果没有在当前作用域中声明它(就像你在问题中的示例中所做的那样),就不能这样做。 - Paul Fleming
@ahmadalishafiee 请查看此问题 https://dev59.com/42445IYBdhLWcg3wpL1_ - andres descalzo

1

可以考虑使用扩展方法:

namespace System
{    
    public static class Extensions
    {
        public static string w(this string message)
        {
            return VCBox.Helpers.Localization.w(message);  
        }
    }
}

这样命名:

"mymessage".w();

或者:

string mymessage = "mymessage";
mymessage.w();

或者:

Extensions.w("mymessage");

@ahmadalishafiee。你所说的“更好的方式”是如何定义的?最短的方式将会有一个“.”。 - Paul Fleming
我想要像WordPress和其他应用程序一样拥有类似“w”的东西。有一个“write”方法来写入内容,现在我想要有一个本地化的写入方式,就像“w”一样。 - ahmadali shafiee
写一个扩展方法针对ViewPage。public static string w(this ViewPage view, string message){/* do stuff */}。然后你就可以直接使用 w("mymessage") - Paul Fleming
我尝试了,但编译器找不到 w。我还在 web.config<namespace> 部分中添加了 <add namespace="VCBox.Helpers"/> - ahmadali shafiee
尝试从扩展类中完全删除命名空间。 - Paul Fleming
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接