Asp.net mvc 在asp.net mvc母版页中使用配置设置的首选方法

Asp.net mvc 在asp.net mvc母版页中使用配置设置的首选方法,asp.net-mvc,configuration,Asp.net Mvc,Configuration,我的问题是:我有一个MVC3应用程序,其中所有视图都使用一个公共母版页。母版页有许多指向其他(内部)站点的链接。我需要能够根据部署环境(例如staging.blah.com、www.blah.com、dev.blah.com等)更改这些链接的域。此域存储在web.config中 有很多方法可以做到这一点,但我希望就首选方法达成某种共识。以下是一些选择,但我愿意接受任何建议: (1) 直接从母版页引用appsettings。这是最简单也是最常见的方法,但我并不特别喜欢阅读web.config并在整

我的问题是:我有一个MVC3应用程序,其中所有视图都使用一个公共母版页。母版页有许多指向其他(内部)站点的链接。我需要能够根据部署环境(例如staging.blah.com、www.blah.com、dev.blah.com等)更改这些链接的域。此域存储在web.config中

有很多方法可以做到这一点,但我希望就首选方法达成某种共识。以下是一些选择,但我愿意接受任何建议:

(1) 直接从母版页引用appsettings。这是最简单也是最常见的方法,但我并不特别喜欢阅读web.config并在整个母版页代码中连接url。事实上,我不确定我是否喜欢访问web.config的视图

(2) 在viewdata/viewbag中使用读取配置的自定义操作过滤器粘贴appsetting值。像以前一样在页面中连接

(3) 如(2)所示,但通过构造函数注入而不是在过滤器中读取appsetting值

(4) 为所有强类型viewmodels创建基类,并使用自定义操作筛选器填充appsetting

(5) 创建一个htmlhelper,它接受路径并在内部读取应用设置并连接

(6) 创建自定义视图基类,插入appsetting值,并将其作为属性或函数提供,该属性或函数接受路径并连接

在母版页需要数据时,我喜欢使用Html.Action,但在整个母版页中使用这些URL的情况下,这是不可能的


想法?

我过去所做的是在母版页中使用viewdata/viewbag,并在基本控制器中填充其值。基控制器依次调用另一个类来执行从web.config读取值的工作

通过这种方式,视图非常干净(例如,它不包含读取appsettings的代码),并且我不需要创建与使用主视图的所有视图相匹配的基本视图模型

这种方法的缺点是使用viewdata/viewbag,但我认为这在我的情况下是可以实现的,而且非常容易实现

(5) 创建一个htmlhelper,它接受路径并在内部读取应用设置并连接

我会选择这个。您的自定义HTML帮助程序可能如下所示:

<%= Html.ExternalActionLink(
    "link text", 
    new { path = "/foo/bar.php" }
    new { param1 = "value1", param2 = "value2" }
) %>

并且可以发出以下HTML:

<a href="http://dev.blah.com/foo/bar.php?param1=value1&param2=value2">link text</a>


tfg-链接是否“始终”相对,即您从未同时将链接指向dev.blah.com和staging.blah.com的组合??-另外,你能解释一下为什么html.action不能与这些URL一起使用(为了我自己的利益:)它们总是dev/staging/www,从来都不是一个混合体,考虑到整个页面中链接的位置,我需要有许多html.actions。由于html操作实际上是一个单独的请求,这将是无效的。