2 回答

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超9個(gè)贊
在模型-視圖-控制器 (MVC) 框架中,控制器的工作是將模型傳遞給視圖。假設(shè)您的字符串列表items
已正確填充,控制器需要將其傳遞給視圖。
首先,您需要區(qū)分操作和輔助方法。操作是控制器類中的公共方法。用戶可以通過 URL 訪問操作,因此在您的情況下,http://application_name/controller_name/PopulateDropDownList將是有效的 URL,盡管這對(duì)用戶來說毫無意義。相反,您需要?jiǎng)?chuàng)建PopulateDropDownList
一個(gè)輔助方法,如下所示:
private async Task<IEnumerable<string>> GetDropdownOptionsList()
{
? List<string> items = ...;
? return items;
}
然后,從 URL 操作調(diào)用幫助程序,例如
public async Task<IActionResult> View()
{
? List<string> items = await GetDropdownListOptions();
? return View(items);
}
您可能希望查看此文檔以獲取有關(guān)控制器操作的信息。
其次,該View()方法構(gòu)造視圖并將其發(fā)送給用戶,但默認(rèn)情況下,它不傳遞任何數(shù)據(jù)。View(items)您可以通過調(diào)用而不是將字符串列表傳遞到視圖View()。然后,您的視圖將如下所示:
@model IEnumerable<string>
<select>
? @foreach (string item in Model)
? {
? ? <option value="@item">@item</option>
? }
</select>
該@model IEnumerable<string>指令指定視圖需要將字符串列表傳遞到視圖中。迭代@foreach (string item in Model)列表中的每個(gè)字符串并option為每個(gè)字符串生成一個(gè)元素。
如果需要將多個(gè)數(shù)據(jù)模型傳遞到視圖中,可以使用ViewBag或ViewData對(duì)象。只需像這樣添加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>

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超5個(gè)贊
你有兩個(gè)選擇。
選項(xiàng)1
從控制器檢索數(shù)據(jù)并從剃刀頁面訪問它。
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>
選項(xiàng)2
直接從 razor 頁面檢索和訪問數(shù)據(jù)。
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>
- 2 回答
- 0 關(guān)注
- 151 瀏覽
添加回答
舉報(bào)