【发布时间】:2018-07-20 06:10:27
【问题描述】:
这是我的视图模型类:
public class CustomerEditViewModel
{
[Display(Name = "Customer Number")]
public string CustomerID { get; set; }
[Display(Name = "Customer Name")]
public string CustomerName { get; set; }
[Display(Name = "Customer Country")]
public string Country { get; set; }
}
我需要使用此类的属性填充下拉列表,因此属性名称将是值,Display.Name 将是下拉项的文本。
<select> HTML 看起来像这样:
<select>
<option value="">--Select--</option>
<option value="CustomerID">Customer Number</option>
<option value="CustomerName">Customer Name</option>
<option value="Country">Customer Country</option>
</select>
编辑
基于 Taylor wood 的回答。我创建了一个小示例代码。在这里。
型号代码
public class MySkills
{
public IEnumerable<SelectListItem> Skills
{
get;
set;
}
}
public class CustomerEditViewModel
{
[Display(Name = "Customer Number")]
public string CustomerID { get; set; }
[Display(Name = "Customer Name")]
public string CustomerName { get; set; }
[Display(Name = "Customer Country")]
public string Country { get; set; }
}
控制器和动作代码
public class HomeController : Controller
{
public ActionResult Index()
{
var items = from p in typeof(CustomerEditViewModel).GetProperties()
let name = p.GetCustomAttribute<DisplayAttribute>().Name
select new SelectListItem() { Text = name, Value = p.Name };
var ClassData = new MySkills();
var selectList = new List<SelectListItem>();
foreach (var item in items)
{
selectList.Add(new SelectListItem
{
Value = item.Value.ToString(),
Text = item.Text
});
}
ClassData.Skills = selectList;
return View(ClassData);
}
}
查看
@model WebTestDropDown.Controllers.MySkills
@{
ViewBag.Title = "Home Page";
}
<br /><br /><br /><br />
<tr>
<td> Populating With Model Data </td>
<td> @Html.DropDownList("ClassData", Model.Skills) </td>
</tr>
【问题讨论】:
-
您好,我有一个问题,您为什么要这样?老实说,从课程到选项似乎有点混乱。我会怎么做?反射,stackify.com/what-is-c-reflection,您可以使用它来操作然后填充您的 DropDown。
-
您需要编写自己的
HtmlHelper方法来执行此操作,或者根据要在DropDownListFor()方法中使用的注释的属性和值构建IEnumerable<SelectListItem> -
@StephenMuecke 你想说什么不清楚。您能否提供位代码示例以提示执行此操作。
-
您可以使用反射来读取类的每个属性及其属性。但这真的没有意义,而且很难理解你为什么要这样做。
-
就像我在你过去的几个问题中告诉你的那样:不要ask a new question for every hurdle you encounter while trying to do something,而是阅读How to Ask 并首先研究它。你倾倒的是“你是怎么做到的” 问题,没有显示你已经尝试过什么。创建一个 POC,先自己尝试一下。
标签: c# asp.net-mvc