是否可以在.cshtml Razor文件中訪問我的項目屬性? 我需要的是這樣的:如何訪問.cshtml razor文件中的項目屬性?
@if (myProject.Properties.Settings.Default.foo) {...}
而foo是一個boolean
我得到的是,由於安全原因,這是不可能的錯誤。
是否可以在.cshtml Razor文件中訪問我的項目屬性? 我需要的是這樣的:如何訪問.cshtml razor文件中的項目屬性?
@if (myProject.Properties.Settings.Default.foo) {...}
而foo是一個boolean
我得到的是,由於安全原因,這是不可能的錯誤。
你真的不應該被直接調用ConfigurationManager
你的看法。在MVC中,視圖應該是'愚蠢的',即不具備數據結構或後端的任何知識,並且通過直接調用ConfigurationManager
您的視圖太瞭解您的設置存儲方式。如果您將設置更改爲使用其他商店(即數據庫),那麼您必須更改視圖。
因此,您應該在別處獲取該值並將其傳遞給您的視圖,以便您的視圖只需處理它就可以了。你可能有2種選擇:
我會阻止選項1,因爲通常避免ViewBag
是很好的,因爲它沒有強類型(Is using ViewBag in MVC bad?)。此外,要做到這一點,你必須從每個控制器的BaseController
繼承,這可能會很痛苦,或者創建一個覆蓋ActionExecuted
並填充ViewBag
那裏的東西的全局動作過濾器。
選項2可能更好。我想創建一個共同的控制器是這樣的:
public class CommonController : Controller
{
[ChildActionOnly]
public ViewResult Settings()
{
// Get some config settings etc here and make a view model
var model = new SettingsModel { Foo = myProject.Properties.Settings.Default.foo };
return View(model);
}
}
然後在您的佈局文件,你可以撥打:
@Html.Action("Settings", new { controller = "Common" })
這使得一個強類型的局部視圖(〜/查看/通用/設置。 CSHTML),它看起來像:
@model YourProject.Models.SettingsModel
@if(Model.Foo)
{
// So something
}
這樣,你仍然在使用強類型模型和視圖,佈局視圖保持清潔,簡單,你的部分觀點仍然是「啞巴」
如果在_Layout視圖中需要這麼做,該怎麼辦? –
這仍然有效 - 只需從佈局視圖中調用動作即可 –
的應用程序設置存儲在web.config文件中
<applicationSettings>
<YourProject.Properties.Settings>
<setting name="Setting" serializeAs="String">
<value>asdqwe</value>
</setting>
所以你可以嘗試使用ConfigurationManager.AppSettings字典一樣
ConfigurationManager.AppSettings["Setting"]
如何在ViewBag(在Controller中)設置該屬性並從那裏調用它? –
好主意,會嘗試 – gurehbgui
但問題是,這是我的_Layout頁面,我在哪裏有Viewbag呢?我不會將它設置在我擁有的每個控制器中。 – gurehbgui