我想在我的.cshtml文件中使用自定義名稱空間中的模型。但是,每當我嘗試設置模型時,Razor都會拋出一個The type or namespace name could not be found
錯誤。Razor在解決方案文件夾中查看?
我已經得到了解決使用的文件夾,以幫助組織項目設置,如下圖所示:
這裏是在MyViewModel.cs文件中的代碼是什麼樣子:
namespace MyProject.ViewModels
{
public class MyViewModel
{
}
}
好吧,所以這是基本的佈局。問題是,當我嘗試在我的Razor視圖中使用MyViewModel
對象時,Razor說它無法找到名稱空間。如下所示:
我相信我正在盡我所能。這看起來好像Razor無法查看解決方案文件夾。我怎樣才能讓MyViewModel
對象被Razor識別?有什麼我失蹤?
請注意:我知道我可以簡單地更改我的@using
聲明以引用整個路徑。但是,在我的項目中,ViewModels文件夾中有許多解決方案文件夾,我不想通過並指定每個解決方案文件夾。
更新
我已經接受Darin的答案,因爲它成功地回答了這個問題。我還提供了一些關於我的具體情況以及爲什麼會出現這個問題的更多信息。
我對這個問題進行了更深入的研究,弄清楚了究竟發生了什麼。我通常使用SparkViewEngine,它允許像這樣引用我的視圖模型:<viewdata model="ViewModels.MyViewModel"/>
當Razor不允許我以相同的方式引用視圖模型時,我認爲Razor出了問題。
每個ViewEngine都會創建用於幫助生成視圖的臨時CS文件。 Spark創建的臨時文件使用「controllers」命名空間。在這種情況下,Spark將在其臨時CS文件中使用MyProject.Controllers
名稱空間。這意味着我可以引用ViewModels.MyViewModel
對象而不指定完整的名稱空間,因爲它與生成的CS文件位於相同的名稱空間中。
由Razor生成的臨時文件使用ASP
命名空間。這意味着我不能在不指定完整名稱空間的情況下引用ViewModels.MyViewModel
對象,因爲它與生成的CS文件不在同一個名稱空間中。
感謝您的回覆。正確的命名空間是「MyProject.ViewModels.MyViewModel」。正如你注意到的那樣,我正在使用'ViewModels.MyViewModel',但在上面我聲明瞭一個@using MyProject'。由於我的使用語句,我認爲Razor會知道在'MyProject'裏面查找'ViewModels'。 – jeremysawesome
不,您的使用語句應該是「@using MyProject.ViewModels」,然後您可以直接使用「MyViewModel」。 –
謝謝!我想清楚發生了什麼事。通常我使用Spark視圖引擎,它允許我用'ViewModels.MyViewModel'指定模型。它歸結爲Spark在其臨時文件中使用的實際名稱空間以及Razor在其臨時文件中使用的名稱空間。 Spark使用控制器名稱空間,即知道「ViewModels.MyViewModel」的'MyProject.Controllers'。 Razor使用不知道「ViewModels.MyViewModel」的ASP命名空間「ASP」。 – jeremysawesome