【问题标题】:Accessing a view's function from another view从另一个视图访问视图的功能
【发布时间】:2016-08-01 11:21:08
【问题描述】:

首先,我是 MVC 的初学者。

我有一个名为 FinanceController 的控制器。我有两个视图,名为 StoreEvaluationFormSendStoreEvaluationToPdf 这个控件。我想从第二个视图调用第一个视图的public static 函数,该函数在@functions 中定义。

我猜视图在 mvc 中有隐藏类。因为我意识到当我将鼠标悬停在第一个视图的函数上时,VS 会显示其名为 _Page_Views_Finance_StoreEvaluationForm_cshtml 的类和名为 ASP 的命名空间。但是我找不到任何方法来访问另一个视图的功能。在第二个视图中,ASP 命名空间只有其名为 _Page_Views_Finance_SendStoreEvaluationToPdf_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);
    }
}

【问题讨论】:

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

标签: c# .net asp.net-mvc function razor


【解决方案1】:

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

About视图的内容:

@{
    ViewBag.Title = "About";
}

@functions
{
    public static string DoStuff()
    {
        return "Content from About view.";
    }
}

Index视图的内容:

@{
    ViewBag.Title = "Home Page";
}

@_Page_Views_Home_About_cshtml.DoStuff()

... (other stuff)

Index 视图中,_Page_Views_Home_About_cshtml 下方显示一条红色波浪线:

名称_Page_Views_Home_About_cshtml在当前上下文中不存在

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-12
    • 1970-01-01
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    • 2011-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多