我创建了一个局部视图来处理下拉列表控件。在我的模型中,我有一个成本中心列表的属性。
[UIHint("SelectionList")]
public List<SelectListItem> CostCentersList {get; private set;}
我使用了UIHint,因此它知道我想使用我创建的SelectionList.ascx:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<List<SelectListItem>>" %>
&lt;%= Html.DropDownListFor(m =&gt; m,Model)%&gt;
然后,在我的主视图中,我使用以下代码来呈现控件:
<%=Html.EditorFor(m => m.CostCentersList)%>
这是有效的...它呈现控件...但是我有一个问题,让我在调用视图时选择我想要选择的项目。我用一些代码做了这个:
BudgetDto b = Services.BudgetServices.GetBudgetById(id);
model = new BudgetViewModel
{
Amount = b.Amount,
BudgetId = id,
CostCenterId = b.CostCenterId,
Description = b.Name,
Deleted = b.Deleted
};
foreach (var i in model.CostCentersList)
if (i.Value == model.CostCenterId.ToString())
i.Selected = true;
然后我返回View(模型)。
按照我的预期渲染控件。问题是,当我单击Submit时,我的Model.CostCenterId为0,而Model.CostCenterList为NULL。我似乎无法从控件中获取所选值。
答案 0 :(得分:2)
要制作下拉列表,您需要两个属性:一个表示所选值并绑定到该列表,另一个属性列为SelectListItem
。在您的情况下,您只有一个列表。所以你需要一个中间视图模型:
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) %>
现在您可以使用SelectedItemId
属性来设置/获取值。