【发布时间】:2009-02-08 13:23:27
【问题描述】:
所以我有一个控制器设置如下:
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 个产品,但是一旦我部署它,就会有大约 15 个产品。数据库中有 300 种产品。我可以将它们全部显示在一个页面上,但是我想使用 (a href="#category") 链接,就像 Wikipedia 在页面顶部这样做一样,我可以拥有类别列表,当您单击一个它将您带到页面的适当部分。所以,在这种情况下,我的观点是这样的:
<%@ 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 循环中循环通过产品的子集,仅抓取适当类别中的那些?
干杯!
【问题讨论】:
-
这个问题之前已经被问过并得到了回答,但我将其保持开放,因为您也在寻求设计建议。在“multiple mvc model site:stackoverflow.com”上进行谷歌搜索,以获取其他要考虑的答案。
标签: c# sql asp.net-mvc view controller