2017-06-05 27 views
1

私はASP.Net MVCの世界では初めてです。私は、モデルデータとしてWebサービスの多くのXMLファイルを使用する小さなアプリケーションで作業しています。 XML Webサービスに格納されているすべてのツールのリストを含むHTMLページがあります。それらはループ内にあり、クリック可能なリンクです。私はまた、一連のテキストボックスである部分的なビューを持っています。私の目標は、テキストボックスに、リストとテキストボックスを同じページに表示させながら、クリックしたツールから得た情報を入力することです。私はこれを行うのに成功していますが、これまでは完全に新しいページとして私の部分的な見解を返すコントローラにIDを渡すことができただけです。私はこれが前にここで答えられたかもしれない簡単な解決策であると確信しています。この問題を解決する最善の方法は何ですか?以下は、データセット部分ビューからメインビューにデータを取得する

public ActionResult GetDataSet(string id) 
    { 
    Tool selectedTool = new Tool(); 
    if (id != null) 
    { 
     var request = 
(HttpWebRequest)WebRequest.Create("http://localhost/DbService/Tool/" + id); 
     XmlDocument xml = new XmlDocument(); 
     Stream aResponsestream; 
     string aResult = ""; 
     using (aResponsestream = request.GetResponse().GetResponseStream()) 
     using (StreamReader aReader = new StreamReader(aResponsestream, 
Encoding.UTF8)) 
     { 
      aResult = aReader.ReadToEnd(); 
      aResponsestream.Close(); 
     } 
     xml.LoadXml(aResult); 
     var Description = 
    xml.SelectSingleNode("RetrieveResponse/RetrieveResult/Tool/Description"); 
     if (Description != null) selectedTool.Description = 
Description.InnerText; 
     var Adapter = 
    xml.SelectSingleNode("RetrieveResponse/RetrieveResult/Tool/Adapter/Name"); 
     if (Adapter != null) selectedTool.Adapter = Adapter.InnerText; 
     var TNumber = 
     xml.SelectSingleNode("RetrieveResponse/RetrieveResult/Tool/TNo"); 
     if (TNumber != null) selectedTool.TNumber = TNumber.InnerText; 
     var ToolId = 
     xml.SelectSingleNode("RetrieveResponse/RetrieveResult/Tool/ToolId"); 
     if (ToolId != null) selectedTool.ToolId = ToolId.InnerText; 


     return View(selectedTool); 
    } 
    else return View(); 

    } 
を受け取るために私のモデル、ビュー(S)と二つのコントローラ

ツールモデル

public class Tool 
{ 
    public int Id { get; set; } 
    public string ToolId { get; set; } 
    public string Adapter { get; set; } 
    public string Description { get; set; } 
    public string TNumber { get; set; } 
    public List<string> ComponentList { get; set; } 
    public List<string> AccessoryList { get; set; } 
    public List<KeyValuePair<string, string>> ToolIdDescription { get; set; } 
    public List<string> toolList = new List<string>(); 

} 

部分ビューコントローラ

public ActionResult PartialView() 
    { 
    Tool newTool = new Tool(); 
    List<string> tools = new List<string>(); 
    tools = backgroundLoad(); 
    newTool.ToolIdDescription = new List<KeyValuePair<string, string>>(); 
    atool.ToolIdDescription = new List<KeyValuePair<string, string>>(); 
    foreach (string tool in tools) 
    { 
     newTool.ToolIdDescription = GetToolDescription(tool); 
    } 

    return View(newTool); 
    } 

コントローラです

@model MiniWeb.Models.Tool 

@{ 
    ViewBag.Title = "GetDataSet"; 
} 
@{ 
    ViewBag.Title = "Tool"; 
} 
<link href="~/Content/Site.css" rel="stylesheet" /> 
<h2>Tool Selection </h2> 
<div class="Tool"> 
    <span id ="id"> 
     @Html.LabelFor(m => Model.ToolId) 
     @Html.TextBoxFor(modelItem => Model.ToolId) 
    </span> 
    <br/> 
    <span id="Description"> 
     @Html.LabelFor(m => Model.Description) 
     @Html.TextBoxFor(modelItem => Model.Description) 
    </span> 
    <br/> 
    <span id="Adapter"> 
     @Html.LabelFor(m=> Model.Adapter) 
     @Html.TextBoxFor(modelItem => Model.Adapter) 

    </span> 
    <br/> 
    <span id="Adapter"> 
     @Html.LabelFor(m => Model.TNumber) 
     @Html.TextBoxFor(modelItem => Model.TNumber) 
    </span> 
    <span> 
     <button> Save </button> 
    </span> 
</div> 

すべてのコードのために申し訳ありませんが、お読みいただきありがとうございましたツール情報を表示するリスト

@model MiniWeb.Models.Tool 

<!DOCTYPE html> 
<html> 
<head> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> 
    <link href="~/Content/Site.css" rel="stylesheet" /> 
</head> 
<body> 
<h2>Tool List</h2> 
<div class="table-responsive"> 
    <table class="table table-hover"> 
     <thead> 
     <tr> 
     <th>Id</th> 
     <th>Description</th> 
     </tr> 
     </thead> 
     @foreach (var item in Model.ToolIdDescription) 
     { 

     <tbody> 
     <tr> 
      <td>@Html.ActionLink(item.Key, "GetDataSet", new { id = item.Key })</td> 
      <td>@Html.DisplayFor(modelItem => item.Value)</td> 
     </tr> 
     </tbody> 
     } 
    </table> 
</div> 
</body> 
</html> 

@Html.Partial("GetDataSet", new MiniWeb.Models.Tool()) 

ビューに含まれてい

ビュー。これが本当に簡単な解決策である場合は、私もお詫び申し上げます。私はASP.Netの新機能で、ハック作業をする代わりにベストプラクティスを開発したいと考えています。助けてくれてありがとう。

答えて

1

さらにいくつかの研究をして、私の問題を解決する方法を見つけ出すことができました。必要なのはAJAXだった。私はHTMLアクションリンクの代わりにAjax.ActionLinkを使用し、ページ上のdivに部分ビューをロードすることができました。ここに私の新しいビューとコントローラがあります。部分的なビューは同じままでした。

ビュー

@model MiniWeb.Models.Tool 

<!DOCTYPE html> 
<html> 
<head> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> 
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> 


    <link href="~/Content/Site.css" rel="stylesheet" /> 
    <script src="~/Scripts/jquery-3.1.1.min.js"></script> 
    <script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script> 
</head> 
<body> 
<h2>Tool List</h2> 
<div class="table-responsive"> 
    <table class="table table-hover"> 
     <thead> 
     <tr> 
     <th>Id</th> 
     <th>Description</th> 
     </tr> 
     </thead> 
     @foreach (var item in Model.ToolIdDescription) 
     { 

     <tbody> 
     <tr> 
      <td>@Ajax.ActionLink(item.Key, "_Partially", new { id = item.Key },new AjaxOptions() 
       { 
        HttpMethod = "GET", 
        UpdateTargetId = "ToolInfo", 
        InsertionMode = InsertionMode.Replace, 


       }) 

      </td> 


      <td>@Html.DisplayFor(modelItem => item.Value)</td> 
     </tr> 
     </tbody> 
     } 
    </table> 
</div> 
</body> 
</html> 
<div id="ToolInfo"> 


</div> 

とうまくいけば、この答えは私のような他の人を助けるPartialViewはこのようになります

部分ビューコントローラ

public PartialViewResult _Partially(string id) 
     { 
     Tool selectedTool = new Tool(); 
     if (id != null) 
     { 
      var request = (HttpWebRequest)WebRequest.Create("http://localhost/DbService/Tool/" + id); 

      XmlDocument xml = new XmlDocument(); 
      Stream aResponsestream; 
      string aResult = ""; 
      using (aResponsestream = request.GetResponse().GetResponseStream()) 
      using (StreamReader aReader = new StreamReader(aResponsestream, Encoding.UTF8)) 


      { 
       aResult = aReader.ReadToEnd(); 
       aResponsestream.Close(); 
      } 
      xml.LoadXml(aResult); 
      var Description = xml.SelectSingleNode("RetrieveResponse/RetrieveResult/Tool/Description"); 
      if (Description != null) selectedTool.Description = Description.InnerText; 
      var Adapter = xml.SelectSingleNode("RetrieveResponse/RetrieveResult/Tool/Adapter/Name"); 
      if (Adapter != null) selectedTool.Adapter = Adapter.InnerText; 
      var TNumber = xml.SelectSingleNode("RetrieveResponse/RetrieveResult/Tool/TNo"); 
      if (TNumber != null) selectedTool.TNumber = TNumber.InnerText; 
      var ToolId = xml.SelectSingleNode("RetrieveResponse/RetrieveResult/Tool/ToolId"); 
      if (ToolId != null) selectedTool.ToolId = ToolId.InnerText; 

      return PartialView("_Partially", selectedTool); 
     } 
     return PartialView(); 


     } 

を返している私の新しいコントローラ将来は。読んでくれてありがとう。

0

メインページコントローラにデータを送信する部分ビューでフォームを作成したいと思うでしょう。

詳細はthisの記事をご覧ください。

関連する問題