2017-09-12 11 views
1

自分のプロジェクトのappSettingsから情報を取得しようとしていますが、情報を編集する必要がある場合はこれを使用しています。キーと値を文字列として抽出してページに表示したい私のコードをheres。私が持っているのappSettings、コントローラページでappSettingsからキーと値を取得しようとしています

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

では私が持っているモデル、

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; } 
    } 
} 

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); 
     } 
    } 
} 

を持っていると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を表示するようにしてください。これは私が達成しようとしていることを実行するための良い習慣か、より良い方法です。私はリストやハッシュテーブルなどを使ってスタックから他のメソッドを試しました。キーと値からデータを取得または抽出する簡単な方法はありますか?

+0

私はあなたが何を求めているのかよく分かりません。 AppSettingsのすべての値をデータ構造に取り込む方法を知りたいですか? – Brett

+0

私はappSettingsキーと値を取って、テーブル本体のタグを持っているcshtmlファイルを使って画面に表示したいので、テーブル表示のようにグリッドとして表示します。 – ryan1234

答えて

1

あなたが働くと思います。後述するように

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"/> 

その後に、このキーを使用出力にリストを生成します。

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

     return View(myProModel); 
    } 

ます。またConfigItemsToMonitorの値を監視するために決めることができました - ちょうど値のカンマ区切りリストに追加します。スペースを除外してください。

+0

これは機能しますが、今後の追加でappSettingsページのすべてのキーを取得しますか? – ryan1234

+0

私はその必要性がなくてもこのシナリオをテストしていませんが、私はそれを期待しています。なぜあなたはそれを行って、結果を知らせるのですか? – Brett

+0

そうです、そうです、appSettingsの一部を切り離すことで、それをすべて取ることができます。私はそれを数時間開いたままにしておき、誰も応答しなければあなたの答えを受け入れる。 – ryan1234

1

は、私はこのような何かがありそうなのAppSettingsのAllKeys属性を使用したい

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]) 
}; 
関連する問題