【问题标题】:Populate Dropdown in MVC with API data使用 API 数据填充 MVC 中的下拉列表
【发布时间】:2019-03-26 16:26:30
【问题描述】:

我对 MVC 比较陌生,仍然很困惑,因此我需要帮助解决一个问题。

我创建了一个网络爬虫控制台应用程序,我在其中比较了两篇文章(我从某个 API 获取数据),现在我想让它成为一个 MVC 项目,其中我有两个需要填充数据的下拉列表从上面提到的API中,我可以比较两篇文章。

对我来说不幸的是,我不知道如何填充这些下拉列表,也就是说,我不知道控制器和模型中的逻辑是什么......有人可以给我提示或推荐一本好书,因为我我完全迷路了。

提前致谢!

编辑: 像这样的东西: MVC app

【问题讨论】:

标签: c# api model-view-controller html.dropdownlistfor selectlistitem


【解决方案1】:

填充下拉列表的一种方法是使用 ViewData。

假设您对 API 的调用驻留在单独的服务中。 API 需要返回一个列表。在此示例中,列表将属于自定义类:List<CustomClass>。假设您的自定义类包含一个属性Id 和一个属性Name。你的控制器看起来像:

public class HomeController : Controller
{
    private readonly IApiService _apiService;

    public HomeController(
        IApiService apiService)
    {
        _apiService = apiService;
    }

    public IActionResult Index()
    {
        // Get the data from the API into the ViewData
        // In this example, Id will be the Id of the dropdown option,
        // and the Name will be what's displayed to the user

        ViewData["DataFromArticle1"] = new SelectList(
                await _apiService.GetDataFromArticle1Async(), 
                "Id", "Name");

        ViewData["DataFromArticle2"] = new SelectList(
                await _apiService.GetDataFromArticle2Async(), 
                "Id", "Name");

        return View();
    }
}

现在,在您的视图中填充下拉列表:

<select asp-items="ViewBag.DataFromArticle1"></select>
<select asp-items="ViewBag.DataFromArticle2"></select>

更新

以下代码将通过 AJAX 调用您的 API 端点。我们假设您已经创建了一个WebApi,并且在您的WebAPI 中您有一个ArticleDataController 和一个名为GetDataFromArticle1 的方法。

你的看法:

<select id="dataFromArticle1"></select>

你的 JavaScript:

$(document).ready(function () {  
    $.ajax({  
        type: "GET",  
        url: "/api/ArticleData/GetDataFromArticle1",   
        success: function (data) {  
            var s = '<option value="-1">Please Select a Department</option>';  
            for (var i = 0; i < data.length; i++) {  
                s += '<option value="' + data[i].Id+ '">' + data[i].Name + '</option>';  
            }  
            $("#dataFromArticle1").html(s);  
        }  
    });  
});  

【讨论】:

  • 我用应用程序应该做什么的图像更新了我的问题。现在我有两个问题: 比较文章的结果也应该来自 API。我需要制作两个单独的 Web 服务,还是应该将控制台应用程序中的整个代码放在 Web 服务中?
  • 在你的问题中,你提到你已经有一个 API,你的控制台应用程序调用它来 (1) 获取数据,并 (2) 比较它。在我的示例中,ApiService 将负责为您的不同任务调用您的 API(即获取数据、比较数据等)。我不知道您的控制台应用程序如何调用 API,但我的建议是您应该将调用 API 的代码放在 ApiService 中。这里的想法是在您的项目中分离关注点(您的控制器不关心您如何获取数据或如何比较它,它只关心数据是否存在)。
  • 感谢您的解释,有些事情已经变得清晰多了,我会按照您的指示告诉您进展如何。再次感谢!
  • 很高兴为您提供帮助,欢迎来到 Stack Overflow。如果此答案或任何其他答案解决了您的问题,请将其标记为已接受。
  • 我可以改用ajax调用来解决这个问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多