【发布时间】:2012-04-18 11:20:38
【问题描述】:
我正在尝试创建一些东西来在我们的 ASP.NET 网站中保存全球站点范围的设置 - 例如站点名称、谷歌分析帐号、facebook url 等...该站点可以有多个“品牌”或子- 与之关联的站点,因此是 sitguid 列,我们还希望可以选择将它们分组,因此是组列 - 例如测试和生产(通过 web.config appsetting 设置)。
我不希望在任何地方对任何 KEY 进行硬编码,但我希望能够在代码中尽可能简单地引用它们,例如SiteSetting.getSetting(“SiteName”)(这些可以在更多初级开发人员将创建的模板(母版页等)中使用)
我还希望能够在我们的管理控制台中管理现有设置并能够创建新设置。
数据类型列用于编辑表单,以便可以使用正确的输入元素,例如位类型的复选框,varchar 的文本框等...
SiteSettings 数据库表当前:
[sts_sitGuid] [uniqueidentifier] NOT NULL, -- tells us which site the setting is for
[sts_group] [nvarchar](50) NOT NULL, -- used to group settings e.g. test/live
[sts_name] [nvarchar](max) NULL, -- the display name of the setting, for edit forms
[sts_alias] [nvarchar](50) NOT NULL, -- the name for the setting
[sts_value] [nvarchar](max) NOT NULL, -- the settings value
[sts_dataType] [nvarchar](50) NULL, -- indicates the control to render on edit form
[sts_ord] [tinyint] NULL, -- The order they will appear in on the admin form
我目前正在完成这项工作,但我对自己的工作方式并不满意,希望这里的任何人提供任何可能有助于找到“正确”解决方案的建议!我敢肯定,在我之前人们已经这样做了。 (我会分享我到目前为止所拥有的,但不想以任何特定方式扭曲答案)我正在寻找的只是一个关于如何最好地完成它的概述,而不是寻找任何人为我写它; )
我在这里和 Google 都进行了大量搜索,但并没有真正找到我想要的东西,尤其是添加新设置“定义”以及编辑现有设置的能力。
系统在 ASP.NET 上使用 webforms 运行,全部用 c# 编写并使用 MSSQL 2008。
一如既往,非常感谢任何帮助!
编辑:为了澄清,我将解释我到目前为止所构建的内容。我决定将所有这些存储在 SQL 中,因为我们不希望 web.config 或其他 xml 文件或其他数据库浮动,因为当我们向其他客户推出应用程序时,它会给我们更多工作。
到目前为止,我有一个 SiteSettings 类,它有一个 GetSetting 方法,我可以使用 GetSetting("SettingAlias") 调用它来获取数据库中“SettingAlias”的值。此类的构造函数从数据库中获取当前站点的所有设置并将其存储在字典中,GetSetting 从该字典中读取。到目前为止,我对这一切都很满意。
我正在努力的部分是生成编辑表单。以前的版本使用网络服务来获取/设置设置,我正在尝试继续使用类似的东西来保存工作,但它们都在代码中定义,例如 GoogleAnalyticsID、Sitename 等......并且每个都有一个列在数据库中,我所做的更改是将这些设置存储为 ROWS(从那时起添加更多更容易,无需更改架构和所有 sitesettings 类)目前我的 SiteSettings 类有一个 SiteSettingsEditForm 方法,它可以获取所有来自数据库的信息,为表单元素创建一堆控件,将其放入临时页面并执行,然后通过 ajax 将生成的 HTML 传递给我们的管理系统。这感觉不对,有点笨拙,是在这里发布它的原因,我无法弄清楚如何通过 web 服务将这些东西保存回来,但更重要的是通过执行包含负载的页面生成一堆 HTML表单控件感觉像是错误的做法。
所以总而言之,我(我认为我)想要编写一个类,以便能够缓存和读取数据库表中的少量行,并给我一个编辑表单(或将数据提供给其他东西以生成表单) 基于同一个数据库表的内容是动态的(例如,我的类型列是“位”我想要一个复选框,它是“文本”我想要一个文本输入)
【问题讨论】:
-
您是否有不想在项目中使用设置文件的原因?一切都将存储在配置文件中,配置转换将处理您的不同环境。它可以在没有数据库的情况下满足您的所有要求,所以我很好奇您为什么要付出如此多的额外努力。
-
我们一直在推出这些系统,并希望能够在在线管理区域中添加我们想要的任何设置 - 设置将由开发人员定义和设置,但可能由用户/站点管理员修改。认为数据库将是显而易见的方式。
标签: c# asp.net architecture