.NET Core MVC-不同的控制器,同一视图页面中的不同HTML,不同的脚本

时间:2019-03-25 15:21:18

标签: javascript asp.net-core model-view-controller .net-core asp.net-core-mvc

我正在使用 .NET Core MVC 开发应用程序。我有不同的数据集,这些数据集通过请求加载到控制器。例如,我有以下控制器方法:

  • 本地主机/选举
  • localhost / Election / 2008
  • 本地主机/选举/ 2008 /美国

适用于此参数的方法在 ElectionController 中,例如:

public async Task<IActionResults> Index(){ 

   // Return a list of data
}


public async Task<IActionResults> Index(string year){ 

   // Return a list of data
}


public async Task<IActionResults> Index(string year, string location){ 

   // Return a list of data
}

发生的事情是,这些方法在同一视图页面 /选举/索引中返回一些数据。

但是我想使用不同的 JavaScript代码不同的html 来在/ Election / Index视图页面中表示此数据集。让我们考虑一个场景

  • 如果用户输入: localhost / Election ,则应用程序正在渲染某些并使用 /script/jsCode1.js

  • 当用户输入以下内容: localhost / Election / 2008 时,应用程序正在渲染一些,并使用 /script/jsCode2.js

  • 当用户输入以下内容时: localhost / Election / 2008 / United_States 然后,应用程序将渲染一些图表,并使用 /script/jsCode3.js

我应该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

然后您需要在不同的页面中进行渲染。您不应该全部渲染。

例如: localhost / Election 将使用各自的js呈现Table.Html。您可以为特定端点返回特定的html。

然后,您将在控制器中拥有一个端点的HTML。

答案 1 :(得分:0)

好吧...首先,有几种不同的方法来处理您的问题,每种方法都会教给您关于框架的一些非常重要的知识。我将提到的前两个不建议,但您应该知道一般可以做什么,即使在这种特定方案中他们是...。从概念上讲(imo)不好

因此,首先:您可以向模型添加属性。说HasYear ...和HasCountry。在您看来,执行switchif并输出所需的脚本和/或html。

第二:您可以让每个Controller端点使用一个不同视图。因此,您可以return View() return View('IndexWithElection而不是最后and的情况下返回View('IndexWithCountry')`

从概念上讲,这是处理此问题的实际正确方法:

您称为Index 的另外两个端点不是Index端点。一个是Year,另一个是Country。您可以使用[Route("{year}")][Route("{year}/{location}")]注释这些端点。因此,现在您有了三种不同的控制器操作,分别具有显式路由和显式View cshtmls。

祝你好运!