C# 将数据从局部视图获取到主视图

C# 将数据从局部视图获取到主视图,c#,asp.net,ajax,asp.net-mvc,model-view-controller,C#,Asp.net,Ajax,Asp.net Mvc,Model View Controller,我是ASP.NETMVC的新手,正在使用一个小型应用程序,该应用程序使用来自web服务的许多XML文件作为其模型数据。我有一个Html页面,其中包含存储在XMLWeb服务中的所有工具的列表。它们在一个循环中,是可点击的链接。我还有一个局部视图,它只是一系列文本框。我的目标是在列表和文本框显示在同一页面上时,用我从单击的工具获得的信息填充文本框。我已经成功地做到了这一点,但到目前为止,我只能将id传递给一个控制器,该控制器将我的部分视图作为一个全新的页面返回。我相信这是一个简单的解决方案,以前可能

我是ASP.NETMVC的新手,正在使用一个小型应用程序,该应用程序使用来自web服务的许多XML文件作为其模型数据。我有一个Html页面,其中包含存储在XMLWeb服务中的所有工具的列表。它们在一个循环中,是可点击的链接。我还有一个局部视图,它只是一系列文本框。我的目标是在列表和文本框显示在同一页面上时,用我从单击的工具获得的信息填充文本框。我已经成功地做到了这一点,但到目前为止,我只能将id传递给一个控制器,该控制器将我的部分视图作为一个全新的页面返回。我相信这是一个简单的解决方案,以前可能已经在这里得到了回答。解决这个问题的最好办法是什么?下面是我的模型、视图和两个控制器

工具模型

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

}
包含列表的视图

@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())
@model MiniWeb.Models.Tool
工具列表
身份证件
描述
@foreach(Model.ToolIdDescription中的变量项)
{
@ActionLink(item.Key,“GetDataSet”,新的{id=item.Key})
@DisplayFor(modelItem=>item.Value)
}
@Html.Partial(“GetDataSet”,新的MiniWeb.Models.Tool())
显示工具信息的视图

@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
@{
ViewBag.Title=“GetDataSet”;
}
@{
ViewBag.Title=“工具”;
}
工具选择
@LabelFor(m=>Model.ToolId)
@Html.TextBoxFor(modelItem=>Model.ToolId)

@LabelFor(m=>Model.Description) @TextBoxFor(modelItem=>Model.Description)
@LabelFor(m=>Model.Adapter) @TextBoxFor(modelItem=>Model.Adapter)
@LabelFor(m=>Model.TNumber) @Html.TextBoxFor(modelItem=>Model.TNumber) 拯救

对不起,所有的代码,但感谢您的阅读。如果这是一个非常简单的解决方案,我也很抱歉。我刚刚接触ASP.Net,希望开发最佳实践,而不是在其上进行黑客攻击。谢谢你的帮助

您需要在局部视图上创建一个表单,将数据提交给主页控制器


你们可以在这篇文章中找到更多的信息。

通过更多的研究,我终于找到了解决问题的方法。结果我只需要一些AJAX。我使用了Ajax.Actionlink而不是HTML操作链接,并且能够在页面的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>
希望这个答案将来能帮助像我这样的人。谢谢你的阅读

@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://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>
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();


      }