从ASP.Net MVC视图访问应用程序设置

19
在ASP.Net MVC 1.0应用程序中,是否可以从我的视图(aspx页面)内访问应用程序设置(MyProject.Properties.Settings.Default.*)?
我尝试过,但智能感知和编译器不支持。它会提示无法访问由于保护级别而被限制的应用程序设置。

另一个问题是:视图是否应被允许从配置文件中读取任何信息? - Jørn Schou-Rode
你在Haack的回答中提到了一个相关问题:你需要打开设置文件,在右上角可以设置可访问性(内部 vs. 公共)。 - Bertvan
2个回答

32
我遇到了类似于Saajid Ismail的问题,我的设置存储在namespace.Properties.Settings.Default.Setting中并且它们是强类型的。为了让它们可访问,我只需要更改访问修饰符即可。enter image description here

19

你的视图应该只负责呈现由控制器提供的数据。它的职责是布局。因此,我建议从控制器动作中传递应用程序数据到视图。

话虽如此,对于你的问题的技术答案是ViewPage派生自Page,所以你可以简单地这样做:

<%= Context.Application["setting"] %>

但是,我仍然不建议这样做。


谢谢Phil。你的解释让我理解了。我正在实现一个PhotoGaller类型的服务,并在web.config中定义了默认图像大小。我想向用户显示这些尺寸,以便他们了解其图像需要符合某些尺寸,否则它将被重新调整大小或拒绝。因此,这仅仅是用于我的视图上的展示目的。我将从Controller传递此信息到我的View中。谢谢。 - Saajid Ismail
一个相关的问题是 - 为什么我不能从我的视图中访问强类型设置类。我指的是通常通过MyProject.Properties.Settings.Default.StronglyTypedSetting访问的settings.settings文件。我知道我不应该这样做 - 我理解这一点。我想知道为什么编译器不会给我访问权限。设置类被标记为internal,而我正在尝试从同一项目中访问它,所以据我所知,不应该有问题。 - Saajid Ismail
但是,如果设置中的信息具有更全局的性质 - 例如应用程序版本号 - 并且要由一个或多个主页面显示,则这不是控制器相关的责任。在HttpHandler或HttpModule实现中处理这是否更有意义? - belugabob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接