Asp.net mvc Asp.net MVC从EditorFor获取值

Asp.net mvc Asp.net MVC从EditorFor获取值,asp.net-mvc,Asp.net Mvc,我创建了一个局部视图来处理下拉列表控件。在我的模型中,我有一个用于成本中心列表的属性 [UIHint("SelectionList")] public List<SelectListItem> CostCentersList {get; private set;} 然后返回视图(模型) 控件按照我的预期呈现。问题是,当我单击“提交”时,我的Model.CostCenterId为0,Model.CostCenterList为空。我似乎无法从控件中获取所选值。要

我创建了一个局部视图来处理下拉列表控件。在我的模型中,我有一个用于成本中心列表的属性

        [UIHint("SelectionList")]
    public List<SelectListItem> CostCentersList {get; private set;}
然后返回视图(模型)


控件按照我的预期呈现。问题是,当我单击“提交”时,我的Model.CostCenterId为0,Model.CostCenterList为空。我似乎无法从控件中获取所选值。

要创建下拉列表,您需要两个属性:一个表示所选值并与之绑定的属性和一个
SelectListItem
列表。在您的情况下,您只有一个列表。因此,您需要一个中间视图模型:

public class DropDownViewModel
{
    public string SelectedItemId { get; set; }
    public IEnumerable<SelectListItem> Items { get; set; }
}
和您的编辑器模板:

<%@ Control 
    Language="C#" 
    Inherits="System.Web.Mvc.ViewUserControl<DropDownViewModel>" %>
<%= Html.DropDownListFor(x => x.SelectedItemId, Model.Items) %>

x、 SelectedItemId,Model.Items)%%>
最后,在您的主要观点中:

<%= Html.EditorFor(m => m.CostCentersList) %>
m.CostCentersList)%%>
现在可以使用
SelectedItemId
属性设置/获取值

public class DropDownViewModel
{
    public string SelectedItemId { get; set; }
    public IEnumerable<SelectListItem> Items { get; set; }
}
[UIHint("SelectionList")]
public DropDownViewModel CostCentersList { get; set; }
<%@ Control 
    Language="C#" 
    Inherits="System.Web.Mvc.ViewUserControl<DropDownViewModel>" %>
<%= Html.DropDownListFor(x => x.SelectedItemId, Model.Items) %>
<%= Html.EditorFor(m => m.CostCentersList) %>