[英]How can I use values from an enum to populate a dropdownlist from my model in an ASP.NET MVC web application?
[英]How can I fill / populate DropDown with my IEnumerable<Model> value ASP.NET MVC
我試圖從模型中設置下拉列表值,因為這是我需要在下拉列表中看到的值,但我遇到了一個錯誤:
不能從用法。 嘗試顯式指定類型參數。
這是我的代碼:
@model IEnumerable<Language>
@using Web.Helpers
@{
ViewBag.Title = "";
}
<div class="">
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="x_panel">
<div class="x_title">
<h2><i class="fa fa-filter"></i> </h2>
<div class="clearfix"></div>
</div>
<div class="x_content">
<br />
@using (Html.BeginForm("Settings","Language", FormMethod.Post, new { @class = "form-horizontal form-label-left" }))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<div class="col-md-12 col-sm-12">
<div class="col-md-12 col-sm-12">
@Html.DropDownListFor(WHATTOWRITEHERE, new SelectList(ViewBag.Languagess, "Id", "Name"), new { @class = "form-control" })
</div>
</div>
}
}
}
}
}
}
控制器動作:
public ActionResult Settings()
{
List<Language> activeL = LanguageController.GetAll();
ViewBag.Languagess = activeLanguages;
return View(activeL);
}
也許我可以完全刪除ViewBag.Languagess
,所以我可以在那里使用(Model, "Id", "Name")
(ViewBag.Languagess, "Id", "Name")
您需要像這樣編寫html
@Html.DropDownListFor(WHATEVER, new SelectList(ViewBag.languages, "Id", "Name"), new { @class = "form-control" })
而在您的控制器中
public ActionResult Settings()
{
List<Language> activeL = LanguageController.GetAll();
ViewBag.Languagess = activeL;
return View();
}
public ActionResult Settings()
{
List<Language> activeL = LanguageController.GetAll();
ViewBag.Languages = activeLanguages.Select(item => new SelectListItem{
Text = item.Name,
Value = item.Id
});
return View(activeL);
}
@Html.DropDownListFor(m => m.LanguageId, ViewBag.Languages, new { @class = "form-control" })
由於您已請求如何使用強類型模型而不是ViewBag來執行此操作。
現在,您的視圖需要IEnumerable<Language>
類型的模型。 將其更改為一個新類,其中包含頁面需要的所有值。
public class LanguagesViewModel
{
List<Language> ActiveLanguages { get; set; }
}
然后在您的控制器中:
var model = new LanguagesViewModel();
model.ActiveLanguages = activeLanguages;
return View(model);
更改視圖以要求使用LanguagesViewModel:
@model LanguagesViewModel
現在,您將不再使用動態視圖包。
@Html.DropDownListFor(m => m.LanguageId, Model.ActiveLanguages, new { @class = "form-control" })
我認為您的模型可能是其他類型,例如“設置”。
public class SettingsModel
{
public int LanguageId { get; set; }
}
public class Language
{
public int Id { get; set; }
public string Name { get; set; }
}
.cshtml
@model SettingsModel
@using Web.Helpers
@{
ViewBag.Title = "";
}
<div class="">
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="x_panel">
<div class="x_title">
<h2><i class="fa fa-filter"></i> </h2>
<div class="clearfix"></div>
</div>
<div class="x_content">
<br />
@using (Html.BeginForm("Settings","Language", FormMethod.Post, new { @class = "form-horizontal form-label-left" }))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<div class="col-md-12 col-sm-12">
<div class="col-md-12 col-sm-12">
@Html.DropDownListFor(model => model.LanguageId, new SelectList(ViewBag.Languagess, "Id", "Name"), new { @class = "form-control" })
</div>
</div>
}
}
}
}
}
}
控制者
[HttpGet]
public ActionResult Language()
{
List<Language> activeL = LanguageController.GetAll();
ViewBag.Languagess = activeLanguages;
return View();
}
[HttpPost]
public ActionResult Language(SettingsModel settings)
{
Language selectedLanguage = LanguageController.GetAll().Where(l => l.Id == settings.LanguageId).SingleOrDefault();
//... your post operations.
}
模型
public class LanguageViewModel
{
public int LanguageId { get; set; }
public IEnumerable<Language> ActiveLanguages{get; set;}
}
public class Language
{
public int Id { get; set; }
public string Name { get; set; }
}
調節器
[HttpGet]
public ActionResult Language()
{
var languageViewModel = new LanguageViewModel
{
ActiveLanguages = LanguageController.GetAll();
}
return View(languageViewModel);
}
視圖
@model LanguageViewModel
@using Web.Helpers
@{
ViewBag.Title = "";
}
<div class="">
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="x_panel">
<div class="x_title">
<h2><i class="fa fa-filter"></i> </h2>
<div class="clearfix"></div>
</div>
<div class="x_content">
<br />
@using (Html.BeginForm("Settings","Language", FormMethod.Post, new { @class = "form-horizontal form-label-left" }))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<div class="col-md-12 col-sm-12">
<div class="col-md-12 col-sm-12">
@Html.DropDownListFor(model => model.LanguageId, new SelectList(Model.ActiveLanguages, "Id", "Name"), new { @class = "form-control" })
</div>
</div>
}
}
}
}
}
}
它將在此示例中工作:
@{
List<SelectListItem> listItems= new List<SelectListItem>();
listItems.Add(new SelectListItem
{
Text = "Exemplo1",
Value = "Exemplo1"
});
listItems.Add(new SelectListItem
{
Text = "Exemplo2",
Value = "Exemplo2",
Selected = true
});
listItems.Add(new SelectListItem
{
Text = "Exemplo3",
Value = "Exemplo3"
});
}
@Html.DropDownListFor(model => model.tipo, listItems, "-- Select Status --")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.