dot*_*bie 2 c# asp.net asp.net-mvc
在我的MVC应用程序中,我需要添加一个显示域名列表的下拉列表.
我已经有一个包含多个属性的ViewModel.我不确定步骤的顺序应该是什么:
ViewModel?应该是什么类型?名单?HTML.DropdownFor吗?我知道我应该在我的问题中加入一些代码,但是现在我很难开始这个...
编辑: 向ViewModel添加以下属性:
public IEnumerable<SelectListItem> DomainList { get; set; }
Run Code Online (Sandbox Code Playgroud)
并实现了一个返回域列表的方法:
internal static List<Domain> FetchAllDomains()
Run Code Online (Sandbox Code Playgroud)
接下来在我的控制器动作中,我有:
var domains = FetchAllDomains().Select(d => d.DomainName);
return new EmailModel() {DomainList = domains };
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
无法将类型'System.Collections.Generic.IEnumerable'隐式转换为'System.Collections.Generic.IEnumerable'.存在显式转换(您是否错过了演员?)
1)向我的ViewModel添加一个新属性?应该是什么类型?名单?
您需要2个属性才能更精确:a IEnumerable<SelectListItem>保存所有可用选项,使用标量属性保存选定值
2)定义一个用值填充上述属性的方法.
是.
3)在视图中使用该属性?使用HTML.DropdownFor?
不,不在视图中.视图不会调用任何方法.视图适用于视图模型.控制器有责任将正确填充的视图模型传递给视图.
例如:
public class MyViewModel
{
public string SelectedValue { get; set; }
public IEnumerable<SelectListItem> Values { get; set; }
... some other properties that your view might need
}
Run Code Online (Sandbox Code Playgroud)
然后是一个控制器动作,它将填充此视图模型:
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);
}
Run Code Online (Sandbox Code Playgroud)
最后是强类型视图,您将在其中显示下拉列表:
@model MyViewModel
@Html.DropDownListFor(x => x.SelectedValue, Model.Values)
Run Code Online (Sandbox Code Playgroud)
更新:
根据您更新的问题,您IEnumerable<SelectListItem>在视图模型上有一个属性,您试图为其分配一个IEnumerable<string>显然不可能的类型值.你可以把它转换成这样的IEnumerable<SelectListItem>:
var domains = FetchAllDomains().Select(d => new SelectListItem
{
Value = d.DomainName,
Text = d.DomainName
});
return new EmailModel { DomainList = domains };
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13132 次 |
| 最近记录: |