通过控制器操作填充下拉列表
Populate a dropdown list via controller action
我必须从 List<string>
填充 dropdown list
,其中键等于显示的值。我想提取值,我做了各种测试以连接到 View
但没有成功。给定提取值的代码:
public async Task<IActionResult> PopulateDropDownList()
{
try
{
var items = await DocumentDBRepository<CosmosDBTelemetry>.GetDeviceIds();
List<string> deviceids = new List<string>();
foreach(var item in items)
{
deviceids.Add(item.deviceId);
}
return View();
}
catch (Exception e)
{
throw (e);
}
}
谁能帮我解决剩下的问题?
在模型-视图-控制器 (MVC) 框架中,控制器的工作是将模型传递给视图。假设您的字符串列表 items
已正确填充,控制器需要将其传递给视图。
首先,您需要区分操作和辅助方法。操作是控制器 class 中的 public 方法。用户可以通过 URL 访问操作,因此在您的情况下,http://application_name/controller_name/PopulateDropDownList 将是有效的 URL 尽管这对用户没有意义。相反,您需要将 PopulateDropDownList
变成像这样的辅助方法:
private async Task<IEnumerable<string>> GetDropdownOptionsList()
{
List<string> items = ...;
return items;
}
然后,从 URL 操作中调用助手,例如
public async Task<IActionResult> View()
{
List<string> items = await GetDropdownListOptions();
return View(items);
}
您可能希望查看 this documentation 以获取有关控制器操作的信息。
其次,View()
方法构造视图并将其发送给用户,但默认情况下,它不传递任何数据。您可以通过调用 View(items)
而不是 View()
将字符串列表传递给视图。然后,您的视图将如下所示:
@model IEnumerable<string>
<select>
@foreach (string item in Model)
{
<option value="@item">@item</option>
}
</select>
@model IEnumerable<string>
指令指定视图需要将字符串列表传递到视图中。 @foreach (string item in Model)
遍历列表中的每个字符串并为每个字符串生成一个 option
元素。
如果您需要将多个数据模型传递到视图中,您可以使用 ViewBag
或 ViewData
对象。只需将 ViewBag.Items = items;
添加到您的 PopulateDropDownList
方法中,如下所示:
private async void PopulateDropDownList()
{
List<string> items = ...;
ViewBag.Items = items;
}
那么您的视图将如下所示:
<select>
@foreach (string item in (IEnumerable<string>)ViewBag.Items)
{
<option value="@item">@item</option>
}
</select>
希望对您有所帮助!
你有两个选择。
选项 1
正在从控制器检索数据并从 razor 页面访问它。
MyController.cs
public async Task<IActionResult> PopulateDropDownList()
{
var items = await
DocumentDBRepository<CosmosDBTelemetry>.GetDeviceIds();
List<string> deviceids = new List<string>();
foreach(var item in items)
{
deviceids.Add(item.deviceId);
}
ViewData["deviceids"] = deviceids;
return View();
}
MyViewPage.cshtml
<select>
<option value="">Select an option</option>
@foreach (string deviceid in ((List<string>)ViewData["deviceids"]))
{
<option value="@deviceid">@deviceid</option>
}
</select>
选项 2
直接从 razor 页面检索和访问数据。
MyViewPage.cshtml
@Code
var items = DocumentDBRepository<CosmosDBTelemetry>.GetDeviceIds();
List<string> deviceids = new List<string>();
foreach(var item in items)
{
deviceids.Add(item.deviceId);
}
End Code
<select>
<option value="">Select an option</option>
@foreach (string deviceid in deviceids)
{
<option value="@deviceid">@deviceid</option>
}
</select>
我必须从 List<string>
填充 dropdown list
,其中键等于显示的值。我想提取值,我做了各种测试以连接到 View
但没有成功。给定提取值的代码:
public async Task<IActionResult> PopulateDropDownList()
{
try
{
var items = await DocumentDBRepository<CosmosDBTelemetry>.GetDeviceIds();
List<string> deviceids = new List<string>();
foreach(var item in items)
{
deviceids.Add(item.deviceId);
}
return View();
}
catch (Exception e)
{
throw (e);
}
}
谁能帮我解决剩下的问题?
在模型-视图-控制器 (MVC) 框架中,控制器的工作是将模型传递给视图。假设您的字符串列表 items
已正确填充,控制器需要将其传递给视图。
首先,您需要区分操作和辅助方法。操作是控制器 class 中的 public 方法。用户可以通过 URL 访问操作,因此在您的情况下,http://application_name/controller_name/PopulateDropDownList 将是有效的 URL 尽管这对用户没有意义。相反,您需要将 PopulateDropDownList
变成像这样的辅助方法:
private async Task<IEnumerable<string>> GetDropdownOptionsList()
{
List<string> items = ...;
return items;
}
然后,从 URL 操作中调用助手,例如
public async Task<IActionResult> View()
{
List<string> items = await GetDropdownListOptions();
return View(items);
}
您可能希望查看 this documentation 以获取有关控制器操作的信息。
其次,View()
方法构造视图并将其发送给用户,但默认情况下,它不传递任何数据。您可以通过调用 View(items)
而不是 View()
将字符串列表传递给视图。然后,您的视图将如下所示:
@model IEnumerable<string>
<select>
@foreach (string item in Model)
{
<option value="@item">@item</option>
}
</select>
@model IEnumerable<string>
指令指定视图需要将字符串列表传递到视图中。 @foreach (string item in Model)
遍历列表中的每个字符串并为每个字符串生成一个 option
元素。
如果您需要将多个数据模型传递到视图中,您可以使用 ViewBag
或 ViewData
对象。只需将 ViewBag.Items = items;
添加到您的 PopulateDropDownList
方法中,如下所示:
private async void PopulateDropDownList()
{
List<string> items = ...;
ViewBag.Items = items;
}
那么您的视图将如下所示:
<select>
@foreach (string item in (IEnumerable<string>)ViewBag.Items)
{
<option value="@item">@item</option>
}
</select>
希望对您有所帮助!
你有两个选择。
选项 1
正在从控制器检索数据并从 razor 页面访问它。
MyController.cs
public async Task<IActionResult> PopulateDropDownList()
{
var items = await
DocumentDBRepository<CosmosDBTelemetry>.GetDeviceIds();
List<string> deviceids = new List<string>();
foreach(var item in items)
{
deviceids.Add(item.deviceId);
}
ViewData["deviceids"] = deviceids;
return View();
}
MyViewPage.cshtml
<select>
<option value="">Select an option</option>
@foreach (string deviceid in ((List<string>)ViewData["deviceids"]))
{
<option value="@deviceid">@deviceid</option>
}
</select>
选项 2
直接从 razor 页面检索和访问数据。
MyViewPage.cshtml
@Code
var items = DocumentDBRepository<CosmosDBTelemetry>.GetDeviceIds();
List<string> deviceids = new List<string>();
foreach(var item in items)
{
deviceids.Add(item.deviceId);
}
End Code
<select>
<option value="">Select an option</option>
@foreach (string deviceid in deviceids)
{
<option value="@deviceid">@deviceid</option>
}
</select>