2017-06-01 68 views
0

我是新來的asp.net MVC。我正在使用一些XML Web服務,並需要創建一個Web應用程序來與它們進行交互。創建模型和控制器以與Web服務交互

Web應用程序將包含一個包含所有工具標識和說明的表格,該表格將在單擊表格上的某個工具時使用該工具的信息填充表單。

通常從// localhost/dbservices/tool/id訪問Web服務。 每個頁面都包含對應於指定工具ID的XML。

我只是混淆瞭如何開始使用MVC這個項目。 我從來沒有使用過不在本地數據庫中的模型數據。

我該如何去分配XML數據到我的模型並在控制器中訪問它,然後將它傳遞給視圖?

這是我正在嘗試的一些代碼。我製作了一個與以往類似的網絡表單應用程序。在這裏,我試圖將所有工具的列表傳遞給控制器​​。我已經採取了一些代碼,並試圖將其實施到我的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

看起來不錯。但是你應該處理流和streamreader,最好的方法是用'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通話解壓到輔助方法。您的網絡電話現在不可重複使用,如果您需要通過站點內的任何其他控制器方法調用該服務,您將被迫編寫重複的代碼。