gur*_*gui 8 asp.net asp.net-mvc razor
是否可以在.cshtml Razor文件中访问我的项目属性?我需要这样的东西:
@if (myProject.Properties.Settings.Default.foo) {...}
Run Code Online (Sandbox Code Playgroud)
而foo是一个 boolean
我得到的错误是因为安全原因不可能.
Ian*_*dge 11
你不应该ConfigurationManager直接从你的观点中打电话.视图在MVC中应该是"哑",即不了解数据结构或后端,并且通过ConfigurationManager直接调用您的视图对于如何存储设置了解得太多.如果您将设置更改为使用其他商店(即数据库),则必须更改视图.
因此,您应该在其他地方获取该值并将其传递给您的视图,以便您的视图可以处理渲染,就是这样.您可能有两个选择:
我不鼓励选项1,因为一般情况下避免使用它是好的,ViewBag因为它不是强类型的(在MVC中使用ViewBag是坏的吗?).此外,为了做到这一点,你要么必须从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);
}
}
Run Code Online (Sandbox Code Playgroud)
然后在您的布局文件中,您可以调用:
@Html.Action("Settings", new { controller = "Common" })
Run Code Online (Sandbox Code Playgroud)
其中呈现强类型的局部视图(〜/ Views/Common/Settings.cshtml),如下所示:
@model YourProject.Models.SettingsModel
@if(Model.Foo)
{
// So something
}
Run Code Online (Sandbox Code Playgroud)
这样你仍然使用强类型模型和视图,你的布局视图保持干净简单,你的局部视图仍然"哑"
| 归档时间: |
|
| 查看次数: |
14321 次 |
| 最近记录: |