试图从appSettings获取密钥和价值

时间:2017-09-12 10:51:00

标签: c# .net

我正在尝试从我的项目中的appSettings获取信息,我正在使用它,所以如果我需要编辑信息,我只需更改应用程序设置页面,我想提取密钥和值为字符串和显示到页面。继承我的代码。在我有的appSettings中,

<?xml version="1.0"?>
<appSettings>
  <add key ="General" value="someValue1"/>
  <add key ="Other" value="otherValue"/>
</appSettings>

在控制器页面中我有

namespace MyPro.Web.Controllers
{
    using System.Collections.Generic;
    using System.Configuration;
    using System.Web.Mvc;
    using Models.MyPro;

    public class MyController
    {
        public ActionResult MyPro()
        {
            Dictionary<string, dynamic> myProData = new Dictionary<string, dynamic>();
            var general = ConfigurationManager.AppSettings["General"];
            var other = ConfigurationManager.AppSettings["Other"];

            myProData.Add("general", general);
            myPrData.Add("other", other);


            var myProModel = new myProModel(myProData);

            return View(myProModel);
        }
    }
}

在我的模型中,

namespace MyPro.Web.Models.MyPro
{
    using System;
    using System.Collections.Generic;
    using System.Configuration;
    using System.Linq;
    using System.Net;
    using System.Net.Http;
    using System.Web.Http;
    using MyPro.Model;

    public class MyProModel
    {

        public MyProModel(Dictionary<string, dynamic> myProData)
        {
            this.MyProData = myProData;
        }

        public Dictionary<string, dynamic> MyProData { get; private set; }
    }
}

在cshtml页面中我有

@model MyPro.Web.Models.MyPro.MyProModel

 <div class="content">

    <h1 class="sectionHeading">Contact Us</h1>
    @foreach (var item in Model.MyProData)
    {
    <div class="contentSection">
        <h2>Tables</h2>
        <div class="innerContentSection">
            <table class="baseTable">
                <thead><tr><th>Column1</th><th>Colum2</th></tr></thead>
                <tbody>
                        <tr><td>@Model.MyProData</td><td>@Model.MyProData["general"].</td></tr>
                        <tr><td>@Model.MyProData</td><td>@Model.MyProData["other"]</td></tr>
                </tbody>
            </table>
        </div>
    </div>
    }
</div>

我的问题是我如何让column1显示字符串general和other以及column2来显示来自appSettings的值的someValue1和otherValue,这是做我想要完成的事情的好习惯还是有更好的方法。我已经尝试使用列表,哈希表等堆栈中的其他方法。是否有一种简单的方法来从键和值中获取或提取数据。

2 个答案:

答案 0 :(得分:1)

我觉得这样的事情会起作用

public class MyProModel
{
    public Dictionary<string, string> MyProData { get; set; }
}


var appSettings = ConfigurationManager.AppSettings;
var myProModel = new MyProModel
{
    MyProData = appSettings.AllKeys.ToDictionary(k => k, k => appSettings[k])
};

答案 1 :(得分:1)

您可能希望使用AppSettings的AllKeys属性。例如:

getendpoints

如下所述,如果您想要输出一个键子集...
首先在配置中添加一个新项目:

    public ActionResult MyPro()
    {
        Dictionary<string, dynamic> myProData = new Dictionary<string, dynamic>();
        ConfigurationManager.AppSettings.AllKeys.ToList().ForEach
        (
            settingsKey =>
            myProData.Add(settingsKey, ConfigurationManager.AppSettings[settingsKey]);
        );
        var myProModel = new myProModel(myProData);

        return View(myProModel);
    }

然后使用此键生成要输出的列表:

<add key ="ConfigItemsToMonitor" value="General,Other"/>

您可以决定还监视ConfigItemsToMonitor的值 - 只需将其添加到逗号分隔的值列表中。确保排除空格。