C# 通过控制器操作填充下拉列表
我必须从键等于显示值的C# 通过控制器操作填充下拉列表,c#,asp.net-mvc,razor,asp.net-core-mvc,html.dropdownlistfor,C#,Asp.net Mvc,Razor,Asp.net Core Mvc,Html.dropdownlistfor,我必须从键等于显示值的列表中填充下拉列表。我来提取这些值,我做了各种测试以连接到视图,但没有成功。给定提取值的代码: public async Task<IActionResult> PopulateDropDownList() { try { var items = await DocumentDBRepository<CosmosDBTelemetry>.GetDeviceIds(); List<string>
列表中填充下拉列表
。我来提取这些值,我做了各种测试以连接到视图
,但没有成功。给定提取值的代码:
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);
}
}
public异步任务PopulateDropDownList()
{
尝试
{
var items=await DocumentDBRepository.getDeviceID();
列表设备ID=新列表();
foreach(项目中的var项目)
{
添加(item.deviceId);
}
返回视图();
}
捕获(例外e)
{
投掷(e);
}
}
有人能帮我做其他事情吗?在模型-视图-控制器(MVC)框架中,控制器的工作是将模型传递给视图。假设您的字符串列表,项
,已正确填充,则控制器需要将其传递给视图
首先,您需要区分动作和助手方法。动作是控制器类中的公共方法。用户可以通过URL访问操作,因此在您的情况下,操作将是有效的URL,尽管这对用户来说毫无意义。相反,您需要将PopulateDropDownList
设置为一个助手方法,如下所示:
private异步任务getDropDownOptions列表()
{
清单项目=。。。;
退货项目;
}
然后,通过URL操作调用帮助程序,例如
公共异步任务视图()
{
列表项=等待GetDropDownstoptions();
返回视图(项目);
}
您可能希望查看以获取有关控制器操作的信息
其次,View()
方法构造视图并将其发送给用户,但默认情况下,它不传递任何数据。您可以通过调用view(items)
而不是view()
将字符串列表传递给视图。然后,您的视图将如下所示:
@model IEnumerable
@foreach(模型中的字符串项)
{
@项目
}
@model IEnumerable
指令指定视图希望将字符串列表传递到视图中。@foreach(模型中的字符串项)
迭代列表中的每个字符串,并为每个字符串生成一个选项
元素
如果需要将多个数据模型传递到视图中,可以使用ViewBag
或ViewData
对象。只需添加ViewBag.Items=Items
到您的PopulateDropDownList
方法,如下所示:
private async void PopulateDropDownList()
{
清单项目=。。。;
ViewBag.Items=项目;
}
那么您的视图将如下所示:
@foreach(在(IEnumerable)ViewBag.Items中的字符串项)
{
@项目
}
我希望这有帮助 您有两个选择
选项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();
}
public异步任务PopulateDropDownList()
{
var项目=等待
DocumentDBRepository.getDeviceID();
列表设备ID=新列表();
foreach(项目中的var项目)
{
添加(item.deviceId);
}
ViewData[“设备ID”]=设备ID;
返回视图();
}
MyViewPage.cshtml
<select>
<option value="">Select an option</option>
@foreach (string deviceid in ((List<string>)ViewData["deviceids"]))
{
<option value="@deviceid">@deviceid</option>
}
</select>
@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>
选择一个选项
@foreach(字符串deviceid in((列表)ViewData[“deviceid”]))
{
@设备ID
}
选项2
直接从razor页面检索和访问数据
MyViewPage.cshtml
<select>
<option value="">Select an option</option>
@foreach (string deviceid in ((List<string>)ViewData["deviceids"]))
{
<option value="@deviceid">@deviceid</option>
}
</select>
@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>
@code
var items=DocumentDBRepository.getDeviceID();
列表设备ID=新列表();
foreach(项目中的var项目)
{
添加(item.deviceId);
}
结束代码
选择一个选项
@foreach(deviceid中的字符串deviceid)
{
@设备ID
}
如何调用控制器方法?我必须在同一页上使用几个不同的模型。您可能希望将PopulateDropDownList
方法作为助手方法而不是操作调用。您还需要使用ViewBag
或ViewData
对象。请参阅我上面的编辑。如果我想在Web API中执行相同的操作,我必须怎么做?所有这些代码都应该可以传输到Web API。请记住,公共方法是客户端可以访问的URL。例如,如果要定义返回整数列表的API端点,则方法签名将是public IEnumerable GetIntegerList()
或public async Task GetIntegerList()
,具体取决于该方法是同步还是异步的。有关更多信息,请参阅。以及中的如何使用控制器方法连接页面?谢谢。我选择选项1。Simone@SimoneSpagna只是使目标页和控制器方法具有相同的名称。i、 (PopulateDropDownList.cshtml)。这不是我的情况。下拉列表位于一个使用多个模型的复杂页面中。如果我想在Web API中执行相同的操作,我必须怎么做?