【问题标题】:asp.net mvc navigation on master page best practices母版页上的 asp.net mvc 导航最佳实践
【发布时间】:2010-08-17 18:09:25
【问题描述】:

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

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

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

作为获取 NAV 模型并创建菜单的局部视图的母版页。 该类别的 roues 类别/{CategoryId}/{CategoryName}/{Page}

问题是当我在部分视图中呈现选定的类别或子类别时,如何将其显示为选定的。

我看到了一些选项: 1. 在应用控制器中创建另一个属性:

    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)

有什么建议吗?

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

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

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

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

    【讨论】:

    • 您好,感谢您的快速回复,您能否详细说明将逻辑移动到操作过滤器的信息? (从 WebForms 迁移..)再次感谢!
    【解决方案2】:

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

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

    应该是这样的

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

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

    谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-21
      • 2020-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多