Используйте свойства разных моделей в представлении (.net MVC) - PullRequest
0 голосов
/ 04 января 2012

Я изучаю MVC и отображаю список продуктов в представлении.

@model IEnumerable<Domain.Model.Product>

<table>
    <tr>
        <th style="width:50px; text-align:left">Id</th>
        <th style="text-align:left">Name</th>
        <th style="text-align:left">Category</th>
    </tr>

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.Id)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Name)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Category.Name)
        </td>            
    </tr>
}

</table>

Продукция относится к категориям, которые отображаются в правом столбце. Теперь я хочу отфильтровать товары по категориям, для которых я хотел бы использовать элемент управления раскрывающегося списка. Я нашел @ Html.DropDownListFor (), но, насколько я понимаю, это даст мне только свойства базовой модели (Product).

Мой контроллер:

public class ProductController : Controller
{
    ProductRepository pr = new ProductRepository();

    public ActionResult Default()
    {
        List<Product> products = pr.GetAll();

        return View("List", products);
    }
}

1 Ответ

0 голосов
/ 04 января 2012

Вы могли бы сделать что-то вроде этого. Просто создайте класс с нужной вам информацией.

public class ProductsModel 
{
     public ProductsModel() {
          products = new List<Product>();
          categories = new List<SelectListItem>();
     }

     public List<Product> products { get;set; }
     public List<SelectListItem> categories { get;set; }

     public int CategoryID { get;set; }

}

Тогда ваш контроллер:

public class ProductController : Controller
{
    ProductRepository pr = new ProductRepository();

    public ActionResult Default()
    {
        ProductsModel model = new ProductsModel();
        model.products = pr.getAll();

        List<Category> categories = pr.getCategories();
        model.categories = (from c in categories select new SelectListItem {
            Text = c.Name,
            Value = c.CategoryID
        }).ToList();

        return View("List", model);
    }
}

Наконец, ваш взгляд

@model IEnumerable<Domain.Model.ProductsModel>

@Html.DropDownListFor(m => model.CategoryID, model.categories)

<table>
    <tr>
        <th style="width:50px; text-align:left">Id</th>
        <th style="text-align:left">Name</th>
        <th style="text-align:left">Category</th>
    </tr>

@foreach (var item in Model.products) {
    <tr>
        <td>
            @item.Id
        </td>
        <td>
            @item.Name
        </td>
        <td>
            @item.Category.Name
        </td>            
    </tr>
}

</table>
...