asp.net mvc导航在母版页上的最佳实践

时间:2010-08-17 18:09:25

标签: c# asp.net-mvc

尝试使用多级导航创建强类型母版页,并希望听到您的意见。

我在这里使用MS推荐的样本: http://www.asp.net/mvc/tutorials/passing-data-to-view-master-pages-vb

所以我有一个ApplicationController获取所有类别,所有其他控制器继承它。它返回一个LIST并将其存储在ViewData [“Nav”]

母版页作为获取NAV模型并创建菜单的局部视图。 该类别的策略 类别/ {类别ID} / {类别名称} / {页}

问题是当我在partialView中渲染时,如何显示所选的类别或子类别。

我看到一些选择: 1.在applicatin控制器中创建另一个属性:

    public class CategoryController : AppliactionController
{
    //
    // GET: /Category/

    public ActionResult Index(string categoryId, string categoryName, int page)
    {
        base.ActiveCategoryId=int.parse(categoryId);
        return View();
    }
  1. 创建菜单时检查局部视图中的当前操作URL,如果它生成相同的操作URL,则将类别设置为选中(不确定我是否可以从操作中获取categoryid)
  2. 有什么建议吗?

2 个答案:

答案 0 :(得分:0)

如果您要使用主控制器模式,则选项1是合适的解决方案。为了更好地分离,您可以考虑将动作中的逻辑移动到动作过滤器中。

我会完全避免使用选项2,因为您不希望在视图中使用这种逻辑。

您可以尝试的第三个选项是不使用主控制器模式,而是设置视图以在与视图主要关注点正交的内容上调用RenderAction。在这种情况下,您的视图看起来像Html.RenderAction("Menu", Model.CurrentCategoryId)

答案 1 :(得分:0)

关于你的分析: “你可以考虑将动作中的逻辑移动到动作过滤器中。”

我可以这样做但是可以从动作过滤器访问控制器案例控制器吗?

应该是

public void OnActionExecuting(ActionExecutingContext filterContext)
{
    ((AppController)filterContext.Controller.base)).ActiveCategoryId=int.parse( filterContext.ActionParameters["CategoryId"])

没有检查代码,只是想听听你的想法,这是你的建议吗?

由于