UpdateModel с SelectList - PullRequest
       13

UpdateModel с SelectList

1 голос
/ 21 июня 2009

У меня есть класс с именем Product

public class Product
{
    public virtual int Id { get; set; }
    public virtual Category Category { get; set; }
}

Скажите, пожалуйста, как обновить категорию с помощью метода UpdateModel.

Ниже вы найдете код категории в View

Ответы [ 2 ]

1 голос
/ 21 июня 2009

Я нашел более простой способ сделать это:

<%= Html.DropDownList("Category.Id", (System.Web.Mvc.SelectList) ViewData["categoryList"])%>
1 голос
/ 21 июня 2009

Если вы заполняете ViewData["categoryList"], например:

ViewData["categoryList"] = categories.Select(
    category => new SelectListItem {
        Text = category.Title,
        Value = category.Id.ToString()
    }).ToList();

, затем в своем действии POST вы можете просто обновить свойство Product.Category:

int categoryId;
int.Parse(Request.Form["Category"], out categoryId);

product.Category = categories.First(x => x.Id == categoryId);

или создайте пользовательский ModelBinder для обновления с помощью UpdateModel ():

public class CustomModelBinder : DefaultModelBinder
{
    protected override void BindProperty(ControllerContext controllerContext, ModelBindingContext bindingContext, System.ComponentModel.PropertyDescriptor propertyDescriptor)
    {
        if (String.Compare(propertyDescriptor.Name, "Category", true) == 0)
        {
            int categoryId = (int)bindingContext.ValueProvider["tags"].RawValue;

            var product = bindingContext.Model as Product;

            product.Category = categories.First(x => x.Id == categoryId);

            return;
        }

        base.BindProperty(controllerContext, bindingContext, propertyDescriptor);
    }
}
...