2009-06-21 9 views
1

J'ai classe nommée ProduitUpdateModel avec SelectList

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

S'il vous plaît me dire comment mettre à jour avec la méthode Catégorie UpdateModel.

Ci-dessous vous trouverez le code de catégorie Voir

Répondre

1

Si vous peuplez ViewData["categoryList"] comme ceci:

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

puis dans votre action POST, vous pouvez simplement mettre à jour votre propriété Product.Category:

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

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

ou créer ModelBinder personnalisé pour la mise à jour avec 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); 
    } 
} 
1

J'ai trouvé un moyen plus facile ne le faire:

<%= Html.DropDownList("Category.Id", (System.Web.Mvc.SelectList) ViewData["categoryList"])%>