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>