2011-10-25 7 views
0

私はリモートサーバに、http://mydomain.com/test.csvのようなURLでアクセス可能なCSVファイルを持っています。これは単にキーと値のペアのレコードです。私のコントローラでは、どのようにCSVファイルを消費し、モデルとしてビューに渡すのですか?私はMVC3に少し慣れているので、何か助けていただければ幸いです。ここでリモートCSVを消費し、MVCでビュー用のモデルに変換しますか?

は私のCSVのサンプルです:

key,value 
Key1,ValueA 
Key2,ValueB 
Key3,ValueC 
Key4,ValueD 
+0

どの部分に助けが必要ですか?ファイルをダウンロードしますか? CSVを解析しますか?それをモデルとして使用しますか? – Aliostad

+0

リクエストごとにcsvを解析すると思いますか?あなたはキャッシング戦略について考えることができます。 –

答えて

2

私は、コントローラからそれを呼び出すことはありません。インターフェイス駆動型の開発を使用して、そのロジックをサービスに委任します。

A quick googleは、CSVパーサーの結果がたくさんあります。つまり、HTTPリクエストを作成してCSVを解析し、それをViewModelにマッピングするだけです。

だからあなたのコントローラは次のようになります。

private ICsvParsingService _csvParsingService; // tip: use DI to inject the concrete in ctor. 

    [HttpGet] 
    public ActionResult Csv() 
    { 
     var csv = _csvParsingService.Parse("http://mydomain.com/test.csv"); 
     var model = Mapper.Map<SomeCsvType,YourModel>(csv); // AutoMapper. Or you could do L-R. 
     return View(model); 
    } 

この方法を使用すると、別のCSVパーサを使用する(または独自のロール)することを決定した場合は、お使いのコントローラが変更する必要はありません。また、アプリケーション全体でこのサービスを再利用することもできます。

+1

+1すてきで清潔な解決策 –

1

このような基本的な質問のようです。このような何かがあなたを始めるはずです。

WebClient client = new WebClient(); 
string csvContents = client.DownloadString(UrlAsString); 
string[] csvLines = csvContents.Split(new string[] {"\n", "\r\n"}, 
             StringSplitOptions.RemoveEmptyEntries); 
SomeModel model = new SomeModel() 
model.KeyValuePairs = csvLines.Select(x => x.Contains(",")) 
          .Select(x => new KeyValuePair(x.Split(",")[0], 
                 x.Split(",")[1]); 


public class SomeModel() 
{ 
    public IEnumerable<KeyValuePair> KeyValuePairs { get; set; } 
} 

public class KeyValuePair() 
{ 
    public KeyValuePair() { } 
    public KeyValuePair(string Key, string Value) 
    { 
    this.Key = Key; 
    this.Value = Value; 
    } 
    public string Key { get; set; } 
    public string Value { get; set; } 
} 
関連する問題