linq asp.net-mvc-3 razor

linq - razor c#



MVC3 Razor @ Html.DropDownListFor (3)

Podría usar algo de ayuda para implementar @ Html.DropDownListFor. Mi objetivo es filtrar la lista de Productos por categoría.

Este código mostrará un cuadro de lista:

@model IEnumerable<Sample.Models.Product> @{ List<Sample.Models.Category> list = ViewBag.Categories; var items = new SelectList(list, "CategoryID", "CategoryName"); } @Html.DropDownList("CategoryID", items)

Pero tengo problemas para lograr que @Html.DropDownListFor funcione:

@model IEnumerable<Sample.Models.Product> @{ List<Sample.Models.Category> list = ViewBag.Categories; var items = new SelectList(list, "CategoryID", "CategoryName"); } @Html.DropDownListFor(???, @items)

Podría usar algo de ayuda para construir la porción Linq de @Html.DropDownListFor . Aquí está el modelo:

public class Product { public int ProductID { get; set; } public string ProductName { get; set; } public int CategoryID { get; set; } public string QuantityPerUnit { get; set; } public Decimal? UnitPrice { get; set; } public short UnitsInStock { get; set; } public virtual Category Category { get; set; } } public class Category { public int CategoryID { get; set; } public string CategoryName { get; set; } public virtual ICollection<Product> Products { get; set; } }


Mi recomendación:

Extienda su clase de contexto de datos LINQ con una función estática para devolver una SelectList de SelectList de todas las categorías, y use Html.DropDownList() para visualizar esta lista.

A continuación, agregue un controlador para esta misma Acción que acepte el ID de categoría y devuelva la lista IEnumerable<Product> que corresponda a esa categoría.


Su vista está fuertemente tipada a una colección de productos, por lo que supongo que necesita un menú desplegable para cada producto. Si este es el caso, una plantilla de editor funcionaría:

@model IEnumerable<Sample.Models.Product> @Html.EditorForModel()

Y luego dentro ~/Views/Shared/EditorTemplates/Product.cshtml

@model Sample.Models.Product @{ List<Sample.Models.Category> list = ViewBag.Categories; var items = new SelectList(list, "CategoryID", "CategoryName"); } @Html.DropDownListFor(x => x.CategoryID, @items)


aquí hay otra manera de hacer lo que quieras.

En el modelo tengo dos entradas

public class Product { public int CategoryID { get; set; } public IEnumerable<SelectListItem> Category { get; set; } }

Luego llené SelectlestItem desde una base de datos o estáticamente. En el controlador Index.cs

product model = new product(); model.Category = <whereever you generated the data>; return View(model);

En la vista

@using (Html.BeginForm("Edit", "Subject", FormMethard.Post, new { id = "genform"})) { <div class="vertical-space spaced-field">@Html.DropDownListFor(m => m.CategoryID, model,Category)</div>