先说下,我写的很多技术类文章都是面向初学者的,为了便于他们理解,我会写的尽量详细,包括很多最基础的操作步骤,并且有些说法可能不太严谨,高手请勿追究。如果写的太专业,不仅没人看我的博客,我还会被喷装B。请高手们原谅。

以前我做网站设置模块的时候,总喜欢把设置都写在一个xml文件里,然后用程序去读写这个xml文件。虽然.NET对XML的支持很好(现在有Linq To XML了),并且我也使用了一个XML工具类,但总体来说,自己手动读写一个xml文件,还是有点蛋疼的。一不小心就容易出错。

今天我突然想到,我们曾经无数次在Web.Config里读取过连接字符串,那么为何不把网站的设置信息也保存在Web.Config中呢?只要使用System.Configuration下的ConfigurationManager类就可以操作Web.Config了,微软都给我们封装好了!

为了验证这一点的可行性,我写了一个非常简单的Test Demo:

首先,在Web.Config的appSettings节点下,创建一个TestNode,并让它的初值为10。写法是:

然后,创建我们的Test.aspx页面,拖一个label,一个TextBox,2个Button:

后台代码这样写,注意保存config的写法。另外,不要忘记using System.Configuration:

using System;
using System.Configuration;

public partial class Test : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        Label1.Text = ConfigurationManager.AppSettings["TestNode"].ToString();
    }
    
    // 9月4日修正:正确的保存方法
    protected void Button2_Click(object sender, EventArgs e)
    {
        Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(System.Web.HttpContext.Current.Request.ApplicationPath);
        AppSettingsSection appSection = (AppSettingsSection)config.GetSection("appSettings");
        appSection.Settings["TestNode"].Value = TextBox1.Text;
        config.Save();
    }
}

然后运行测试一下,发现我们既可以Get,又可以Set那个TestNode的Value。

注意,如果SET里直接写 ConfigurationManager.AppSettings["TestNode"] = "值"; 是错误的,虽然网页上可以看到结果,但其实这种修改并没有写入config文件。正确的写法已经在上面的代码中修正。