下载MVC
在我的MVC应用程序中,我需要添加一个显示域名列表的下拉列表。
我已经有一个包含多个属性的ViewModel。 我不确定步骤的顺序应该是什么:
- 将新属性添加到我的
ViewModel
? 应该是什么类型? 名单? - 定义使用值填充上述属性的方法。
- 在视图中使用该属性? 使用
HTML.DropdownFor
?
我知道我应该在我的问题中加入一些代码,但是现在我很难开始这个…
编辑:向ViewModel添加以下属性:
public IEnumerable DomainList { get; set; }
并实现了一个返回域列表的方法:
internal static List FetchAllDomains()
接下来在我的控制器动作中,我有:
var domains = FetchAllDomains().Select(d => d.DomainName); return new EmailModel() {DomainList = domains };
但是我收到以下错误:
无法将类型’System.Collections.Generic.IEnumerable’隐式转换为’System.Collections.Generic.IEnumerable’。 存在显式转换(您是否错过了演员?)
1)向我的ViewModel添加新属性? 应该是什么类型? 名单?
您需要2个属性才能更精确: IEnumerable
用于保存所有可用选项,标量属性用于保存选定值
2)定义一个用值填充上述属性的方法。
是。
3)在视图中使用该属性? 使用HTML.DropdownFor?
不,不在视图中。 视图不会调用任何方法。 视图适用于视图模型。 控制器有责任将正确填充的视图模型传递给视图。
例如:
public class MyViewModel { public string SelectedValue { get; set; } public IEnumerable Values { get; set; } ... some other properties that your view might need }
然后是一个控制器操作,它将填充此视图模型:
public ActionResult Index() { var model = new MyViewModel(); model.Values = new[] { new SelectListItem { Value = "1", Text = "item 1" }, new SelectListItem { Value = "2", Text = "item 2" }, new SelectListItem { Value = "3", Text = "item 3" }, }; return View(model); }
最后是强类型视图,您将在其中显示下拉列表:
@model MyViewModel @Html.DropDownListFor(x => x.SelectedValue, Model.Values)
更新:
根据您更新的问题,您在视图模型上有一个IEnumerable
属性,您尝试为其指定IEnumerable
类型的值,这显然是不可能的。 您可以将此转换为IEnumerable
如下所示:
var domains = FetchAllDomains().Select(d => new SelectListItem { Value = d.DomainName, Text = d.DomainName }); return new EmailModel { DomainList = domains };
如果您不介意,我会向您展示一个示例考试列表
public class SomeClass { //Properties public int ExamId { get; set; } public SelectList ExamList { get; set; } }
帮手:
public static void PopulateExamList(MarkEditViewModel model, List examList) { model.ExamList = new SelectList(examList, "Id", "ExamName"); }
在我的示例中,您必须添加标记所有考试的列表。 在View中,您将获得一个考试下拉列表
和视图(预测模型中的每个元素):
@Html.DropDownListFor(model => model.ExamId, Model.ExamList, "Choose exam")
一旦你的控制器上的列表将其传递给视图(作为模型或使用ViewBag),然后使用帮助器:
Html.DropDownList( string name, IEnumerable selectList, string optionLabel, object htmlAttributes)
或者(MVC 3)
@Html.DropDownListFor(model => model.Property.ID, new SelectList(model.PropertyList, "ID", "Type"))
在您的ViewModel中
public class ViewModelClass { public string DomainName { get; set; } public IEnumerable DomainList { get { return GetDomainNames() //your method to get domain names .Select(d => new SelectListItem() { Text = d, Value = d }); } } }
你的强类型视图
@model ViewModelClass @Html.DropDownListFor(model => model.DomainName, Model.DomainList)
- 是的,您需要模型中的属性来处理
DropDownList
的值 - 取决于,通常可以是指向DropDownlist的值的Integer。您将用于填充元素的List可以定义为ViewBag中的元素,或模型中的Another Attribute
- 剃刀语法完全取决于您尝试实现的目标应该使用
@Html.DropDownListFor()
引用模型的属性以保证视图是@Html.DropDownListFor()
您处于正确的轨道,ViewModel中有2个属性。 一个用于保存UI中所选项ID的项目列表和其他项目
public class ProductViewModel { public IEnumerable Items { get; set; } public string SelectedItemId { get; set; } //Other Properties }
在Get Action方法中,返回包含数据的ViewModel
public ActionResult Index() { var objProduct = new ProductViewModel(); objProduct.Items = new[] { new SelectListItem { Value = "1", Text = "Domain 1" }, new SelectListItem { Value = "3", Text = "Domain 2" }, new SelectListItem { Value = "3", Text = "Domain 3" } }; // can replace the above line with loading data from Data access layer. return View(objProduct); }
并在您的视图中强烈键入ProductViewModel
@model ProductViewModel @using (Html.BeginForm()) { @Html.DropDownListFor(x => x.SelectedItemId, new SelectList(Model.Items,"Value","Text"), "Select..") }
在您的HTTPpost操作中,您将获得所选的值
上述就是C#学习教程:下载MVC分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
[HttpPost] public ActionResult Index(ProductViewModel model) { // check model.SElectedItemId here }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/943403.html