2016-08-01 136 views
1

首先,我是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); 
    } 
} 
+5

將共享函數移動到輔助類可能是一個更好的主意。有沒有理由不能這樣做? –

+0

沒有理由。我也可以將它移到控制器類。但我只想知道。有沒有辦法從同一個控制器中的另一個視圖訪問視圖的功能。 –

+3

使用MVC,視圖中應該沒有功能。要共享代碼或視圖的一部分,請創建一個局部視圖。如果它是JavaScript把它放在腳本文件中並在兩個地方引用它。 –

回答

2

是的,這可以實現。我在Visual Studio中的默認MVC項目試了一下2015年

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不會在當前上下文

存在儘管錯誤消息中的名稱,應用程序成功地構建和我可以從About視圖導航到/Home/Index當看到該消息。

View

+0

這很有趣,但你是對的。 –