C# 访问视图';从另一个角度看s函数

C# 访问视图';从另一个角度看s函数,c#,.net,asp.net-mvc,function,razor,C#,.net,Asp.net Mvc,Function,Razor,首先,我是MVC的初学者 我有一个名为FinanceController的控制器。我有两个视图,分别是该控件的StoreEvaluationForm和sendstoreeevaluationtopdf。我想从第二个视图调用第一个视图的公共静态函数,该函数在@functions中定义 我猜视图在mvc中隐藏了类。因为我意识到,当我将鼠标移到first view的函数上时,VS显示其名为\u Page\u Views\u Finance\u StoreEvaluationForm\u cshtml的

首先,我是MVC的初学者

我有一个名为
FinanceController
的控制器。我有两个视图,分别是该控件的
StoreEvaluationForm
sendstoreeevaluationtopdf
。我想从第二个视图调用第一个视图的
公共静态
函数,该函数在
@functions
中定义

我猜视图在mvc中隐藏了类。因为我意识到,当我将鼠标移到first view的函数上时,VS显示其名为
\u Page\u Views\u Finance\u StoreEvaluationForm\u cshtml
的类及其名为ASP的命名空间。但是,我找不到任何方法来访问另一个视图的函数。在第二个视图中,ASP名称空间只有一个名为
\u Page\u Views\u Finance\u SendStoreEvaluationToPdf\u cshtml
的类

需要明确的是,视图中的函数是一个C#函数,而不是javascript函数。其定义是:

@functions
{
    public static string NumberFormatter(double? number, bool percent = false)
    {
        return number == null ? null : string.Format("{0}{1}", number.Value.ToString("N2"), percent ? "%" : null);
    }
}

是的,这是可以实现的。我在VisualStudio2015中使用默认的MVC项目进行了尝试

关于
的内容查看:

@{
    ViewBag.Title = "About";
}

@functions
{
    public static string DoStuff()
    {
        return "Content from About view.";
    }
}
@{
    ViewBag.Title = "Home Page";
}

@_Page_Views_Home_About_cshtml.DoStuff()

... (other stuff)
索引的内容
查看:

@{
    ViewBag.Title = "About";
}

@functions
{
    public static string DoStuff()
    {
        return "Content from About view.";
    }
}
@{
    ViewBag.Title = "Home Page";
}

@_Page_Views_Home_About_cshtml.DoStuff()

... (other stuff)
索引
视图中,在
\u Page\u Views\u Home\u下方有一条红色的曲线,显示关于\u cshtml
的内容:

当前上下文中不存在名称\u页面\u视图\u主页\u关于\u cshtml

尽管出现了错误消息,应用程序还是成功构建,当导航到
/Home/Index
时,我可以从
About
视图中看到消息


将共享函数移动到helper类可能是一个更好的主意。你为什么不能那样做?没有理由。我还可以将其移动到控制器类。但我只是想知道。是否有一种方法可以从同一控制器中的另一个视图访问视图的功能。使用MVC时,视图中不应有任何功能。要共享代码或视图的一部分,请创建局部视图。如果是JavaScript,则将其放在脚本文件中,并在两个位置引用它。它不是JavaScript函数。这是一个C#函数。我添加了它的定义。是的,这是错误的方法,即使你可以,也不要。MVC是一种模式,请坚持以正确的方式使用该模式