c# - 使用 API 数据填充 MVC 中的下拉菜单
问题描述
我对 MVC 比较陌生,仍然很困惑,因此我需要帮助解决问题。
我创建了一个网络爬虫控制台应用程序,我在其中比较了两篇文章(我从某个 API 获取数据),现在我想让它成为一个 MVC 项目,其中我有两个下拉列表需要用上面的数据填充-提到的API,以便我可以比较两篇文章。
对我来说不幸的是,我不知道如何填充这些下拉列表,也就是说,我不知道控制器和模型中的逻辑是什么......有人可以给我一个提示或推荐一个好的阅读,因为我完全迷失了.
提前致谢!
编辑:像这样的东西: MVC 应用程序
解决方案
填充下拉列表的一种方法是使用 ViewData。
假设您对 API 的调用驻留在单独的服务中。API 需要返回一个列表。在此示例中,列表将属于自定义类:List<CustomClass>
. 假设您的自定义类包含一个 propertyId
和一个 property 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);
}
});
});
推荐阅读
- freeradius - 自由半径会计过滤器
- openstack - 如何从主机 B(位于同一网络上)到达主机 A 上的 DevStack 实例设置?
- android - 如何接受 Android Studio SDK 许可?
- python - Python 多重赋值真的是从右到左吗?
- java - Java Spring Boot 多对多
- amazon-web-services - 如何使用 Maven 和 Nexus 从 CodeBuild 正确访问 AWS Secrets Manager
- sockets - DLL 创建连接失败并显示“现有连接已被远程主机强制关闭”
- mongodb - 如果 MongoDB 副本集节点在主选举期间找不到多数,它会在哪种状态下结束?
- javascript - Material UI 元素不会显示。一个棕褐色框显示而不是任何 MUI 元素。我怎样才能解决这个问题?
- c# - 在 Blazor 页面中渲染反应组件