开发者

Asp.net MVC getting value back from an EditorFor

I have created a partial view to handle drop down list controls. In my model, I have a property for a list of Cost Centers.

        [UIHint("SelectionList")]
    public List<SelectListItem> CostCentersList {get; private set;}

I used the UIHint so that it knows I want to use my SelectionList.ascx I created:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<List<SelectListItem>>" %>

<%=Html.DropDownListFor(m=>m, Model) %>

And then, in my main view, I use the following code to get the control rendered:

<%=Html.EditorFor(m => m.CostCentersList)开发者_开发技巧%>

This is working... It renders the control... but I had an issue making the control select the item I wanted selected when I call the view. I did this with some code:

                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;

I then return View(model).

The control is rendered as I'd expect. Problem is, when I click Submit, my Model.CostCenterId is 0, and Model.CostCenterList is NULL. I can't seem to get the selected value back from the control.


To make a dropdown list you need two properties: one that represents the selected value and is bound to it and a list of SelectListItem. In your case you have only a list. So you need an intermediary view model:

public class DropDownViewModel
{
    public string SelectedItemId { get; set; }
    public IEnumerable<SelectListItem> Items { get; set; }
}

and then on your view model have:

[UIHint("SelectionList")]
public DropDownViewModel CostCentersList { get; set; }

and your editor template:

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

and finally in your main view:

<%= Html.EditorFor(m => m.CostCentersList) %>

Now you could use the SelectedItemId property to set/get the value.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜