2017-06-01 14 views
0

私はasp.net MVCを初めて使用しています。私はいくつかのXML Webサービスを扱っており、それらとやり取りするWebアプリケーションを作成する必要があります。Webサービスと対話するためのモデルとコントローラの作成

ウェブアプリケーションは、テーブル上のツールの1つがクリックされると、ツールの情報をフォームに入力するすべてのツールのIDと説明のテーブルで構成されます。

Webサービスは、通常、// localhost/dbservices/tool/idからアクセスされます。 各ページには、指定されたツールのIDに対応するXMLが含まれています。

MVCを使用してこのプロジェクトを開始する方法としてちょっと混乱しています。 私はローカルデータベースになかったモデルデータを使ったことはありません。

モデルにXMLデータを割り当て、コントローラでそのデータにアクセスしてビューに渡す方法を教えてください。

ここに私が試しているコードがあります。私は過去にこれに似たWebフォームアプリケーションを作った。ここでは、すべてのツールのリストをコントローラに渡そうとしています。私はそれからいくつかのコードを取り、それを私のMVCアプリケーションに実装しようとしています。私はここで正しい道にいるのだろうかと思っています。モデルビューとツール用コントローラも含まれています。

public ActionResult Component() 
    { 
    string rt; 
    WebRequest request = 
    WebRequest.Create("http://localhost/DbService/Tool"); 
    WebResponse response = request.GetResponse(); 
    Stream dataStream = response.GetResponseStream(); 
    StreamReader reader = new StreamReader(dataStream); 
    rt = reader.ReadToEnd(); 
    XmlDocument xmldoc = new XmlDocument(); 
    xmldoc.LoadXml(rt); 
    XmlNodeList nodeList = xmldoc.GetElementsByTagName("Tool"); 

    List<Tool> ToolIdList = new List<Tool>(); 
    Tool[] toolArray = new Tool[3]; 
    List<string> toolList = new List<string>(); 
    foreach (XmlNode node in nodeList) 
    { 
     toolList.Add(node.InnerText); 
    } 
    foreach (Tool tool in ToolIdList) 
    { 
     foreach (var toolId in toolList) 
     { 
      tool.ToolId = toolId; 

     } 
    } 

    return View(ToolIdList); 
    } 

ツールモデル:

public class Tool 
{ 
public int Id { get; set; } 
public string ToolId { get; set; } 
public string Adapter { get; set; } 
public int TNumber { get; set; } 
public List<string> ComponentList { get; set; } 
public List<string> AccessoryList { get; set; } 
} 

ビュー:

@model IEnumerable<Project.Models.Tool> 

@foreach (var item in Model) 
{ 
@Html.DisplayFor(modelItem => item.ToolId) 
} 
+1

データベースから値を取得する場所は、Webサービスから取得する場所です。 – stuartd

+0

私の質問にいくつかのコードを追加しました。これは正しい道に似ているようですか? – totallytypicalcow

+1

見た目はOKです。しかし、あなたはストリームとストリームリーダを処分すべきです。最良の方法は 'using'ステートメントでそれらを包むことです。実際には – stuartd

答えて

0

は、私はあなたにXmlSerializerクラスを提案することができます。それは基本的に(あなたのコード内でハード時間を与えているものである)オブジェクトにあなたのxmlを解凍しますデシリアライズする方法を持っている

デシリアライザのドキュメント: https://www.codeproject.com/Articles/487571/XML-Serialization-and-Deserialization-Part-2

:セットアップと使用の https://msdn.microsoft.com/en-us/library/tz8csy73(v=vs.110).aspx

また、コントローラ外のWeb呼び出しをヘルパーメソッドに抽出します。あなたのウェブ通話は今のように再利用可能ではなく、サイト全体の他のコントローラメソッドからサービスを呼び出す必要がある場合は、重複したコードを書くように強制されます。

関連する問題