【问题标题】:How to use ASP.Net MVC Child Actions with VS 2017 C# and MVC 5如何在 VS 2017 C# 和 MVC 5 中使用 ASP.Net MVC 子操作
【发布时间】:2018-12-14 07:22:43
【问题描述】:

我有一个场景,但不知道是否可以使用子操作来执行此操作。

我没有要显示的代码。基本上,在包含摘要数据的视图左侧会有一个简单的列表。在列表的每一行上还有一个“查看详细信息”链接或按钮。因此,我希望用户单击该链接/按钮,然后在右侧我希望显示有关特定选定项目的更多详细信息。然后,用户可以单击另一个项目的查看详细信息并查看这些详细信息等。

如何在 ASP.Net MVC 中最好地实现这一点?

提前致谢。

【问题讨论】:

  • 因此,如果他们点击超过 1 个“查看详细信息”,它应该在右侧面板中显示所有详细信息?或者新点击的细节应该替换那里的那个?
  • 新点击的详细信息应替换原来的详细信息
  • 您可以使用Ajax在单击链接时检索有关项目的数据,然后使用返回的数据填充 div 或您使用的任何元素以在右侧显示项目信息面板。
  • 你能给我一个代码示例吗?左边的每一行都有一个按钮..你怎么知道哪个被点击了等等?任何帮助都非常感谢。
  • 为你添加了一个示例答案

标签: model-view-controller controller views action partial


【解决方案1】:

这是 OP 的示例,这可能是也可能不是最好的方法,但它会起作用:

所以您的左侧面板有按钮或链接,如果您的按钮/链接的文本足以从服务器拉回相关数据,只需通过 Ajax 将其传递给服务器,否则如果您想使用 ids或一些唯一标识符,您可以将其附加到按钮/链接的 id 属性中,然后将其传递给服务器,我会让您决定要使用哪个:

//Example HTML
<div id="panelLeft">
   <button id="btnOne" class="btnInfo">Info on Cats</button>
   <br/>
   <button id="btnTwo" class="btnInfo">Info on Dogs</button>
</div>

//Assuming you are using JQuery
//Either in your page add a script tag with this code, or add a script file
//to your project and import it into your page (View)
$(function(){
      //Add click events to all your buttons by using the common className btnInfo
      $('.btnInfo').on('click', function(){
            const serverSideData = $(this).text(); //If you are using the text
            //of the button to find the info server side
            $.ajax({
                  url: "yourUrlToServerSideMethod",
                  type: "POST",
                  data: { yourServerSideParameter: serverSideData },
                  success: function(data){
                      //Successfully posted to server and got response
                      //If data is in JSON format, you can parse it with JSON.parse()

                      //Clear your div on the right which displays the item data
                      $('#divRightPanelInfo).html('');
                      $('#divRightPanelInfo).append(data); //If this is just a string
                      //Or create some pretty element(s) and append that to div

                  },
                  error: function(jqXHR, exception){
                      //Handle error, show error label or something
                  }
              });
       });
 });

【讨论】:

  • 谢谢!按钮的文本将始终显示“查看”,因此文本将相同。我需要为 mvc 控制器上的操作获取一个 (int) id。这个 id 是唯一标识每一行的数据项。我当前的操作返回了一个局部视图——我需要为此返回一些不同的东西吗? ..因此我需要采取其他行动吗?此外,在 foreach 中生成的行和按钮是在生成中创建的。为按钮标记中的 id 处理此问题的最佳方法是什么?
  • @D.Man 在迭代 foreach 时,如果您使用一些具有 id 属性的自定义类,您可以执行 button id="btnViewData_(concatenate the id value of the object here)" 然后在上面的代码中,而不是使用 $(this).text()你可以做const serverSideData = $(this).prop('id').replace('btnViewData_', ''); 至于你需要什么服务器端,你需要创建一个接受整数(你的id)的方法,并返回你想在右侧面板中显示为字符串或其他格式的数据,只是确保该方法具有匹配的返回类型。
  • 谢谢。我可以从脚本代码中访问按钮的“值”吗,因为我可以在 foreach 中设置它?从 MVC 操作返回数据需要什么? PartialViewResult 还是别的什么?
  • 我应该补充一下,显示细节/子数据的部分视图也有一个视图模型
  • 如果您要返回一个局部视图以在右侧面板内进行渲染,将其返回为 PartialView 应该没问题,那么您可以这样做$('#divRightPanelInfo).append(data);
猜你喜欢
  • 1970-01-01
  • 2021-10-27
  • 2018-05-29
  • 1970-01-01
  • 1970-01-01
  • 2017-09-26
  • 1970-01-01
  • 2011-10-24
  • 2013-12-27
相关资源
最近更新 更多