Итак, у меня есть контроллер, настроенный следующим образом:
using NonStockSystem.Models;
namespace NonStockSystem.Controllers
{
[Authorize(Users = "DOMAIN\\rburke")]
public class AdminController : Controller
{
private NonStockSystemDataContext db = new NonStockSystemDataContext();
public ActionResult Index()
{
var enumProducts = from p in db.Products select p;
ViewData["Title"] = "Administration";
return View(enumProducts.ToList());
}
}
}
Представление «Индекс» на контроллере администратора просто перечисляет продукты в системе и позволяет нам щелкнуть продукт, чтобы просмотреть / отредактировать / удалить его. Действительно просто. Однако у каждого продукта есть CategoryID, который сообщает нам, в какой категории он хранится в отдельной таблице.
(очень упрощенный) текущий вид:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="NonStockSystem.Views.Home.Admin" %>
<%@ Import Namespace="NonStockSystem.Models" %>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
<%
foreach (Product p in (IEnumerable)ViewData.Model)
{ %>
<%=p.Name.ToString() %> (<a href="/Admin/Edit/<%=p.ID.ToString() %>">Edit</a> - <a href="/Admin/Delete/<%=p.ID.ToString() %>">Delete</a>)<br />
<%
} %>
</asp:Content>
На данный момент это нормально, так как в системе есть только 10 или 15 продуктов, пока я разрабатываю и тестирую ее, однако, как только я разверну ее, будет приблизительно. 300 товаров в базе данных. Я в порядке с отображением их всех на одной странице, однако я хотел бы использовать ссылки (a href = "# category") так же, как это делает Википедия, так что в верхней части страницы я могу получить список категорий, и когда вы нажимаете один он приводит вас в соответствующий раздел страницы. Итак, мой взгляд в этом случае будет выглядеть так:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="NonStockSystem.Views.Home.Admin" %>
<%@ Import Namespace="NonStockSystem.Models" %>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
<ul>
<%
foreach (Category c in (IEnumerable)ViewData.Model)
{ %>
<li><a href="#<%=c.Name.ToString() %>"><%=c.Name.ToString() %></a></li>
<%
} %>
</ul>
<hr />
<%
foreach (Category c in (IEnumerable)ViewData.Model)
{ %>
<% // Display the category name above all products from that category %>
<h2><a name="<%=c.Name.ToString() %>"><%=c.Name.ToString() %></a></h2>
<% // Need to limit the following foreach to grab only products in this category
foreach (Product p in (IEnumerable)ViewData.Model)
{ %>
<%=p.Name.ToString() %> (<a href="/Admin/Edit/<%=p.ID.ToString() %>">Edit</a> - <a href="/Admin/Delete/<%=p.ID.ToString() %>">Delete</a>)<br />
<%
} %>
} %>
</asp:Content>
Во-первых, я не совсем уверен, что это «правильный» способ сделать это, поэтому я определенно открыт для предложений о другом способе ведения дел, но если это путь, то мне нужно знать, как (1) передать два набора результатов в представление (Товары и Категории) и (2) пройти через подмножество Продуктов в каждом цикле foreach, отбирая только те, что в соответствующей категории?
Ура!