gpt4 book ai didi

asp.net-mvc - 为 MVC 创建 Web 导航助手类

转载 作者:行者123 更新时间:2023-12-04 07:01:46 25 4
gpt4 key购买 nike

我是 MVC 的新手,并试图在我的 MVC 应用程序中使用 Web 导航器类。 http://polymorphicpodcast.com/shows/webnavigator/
该类使我们能够在中央类文件中使用强类型的 url。

我有3个问题:

  • 这是最好的存储方式吗
    MVC 中的强类型 url 或
    MVC 有一些特殊的辅助方法
    它做同样的事情。
  • 类的最佳地点是什么
    要进入的文件,例如 VIEW/MODEL 或
    Controller
  • 以下是导航的示例
    返回正确 url 的类
    一个图像文件。
    而不是将 UrlHelper 对象传递给我想要的
    运行这个
    System.Web.Mvc.ViewPage 中的类
    上下文(当前上下文)。什么是
    这样做的最佳方式。

  • 图像导航器类示例:
    using System.Web;
    using System.Web.Mvc;

    public class IMG
    {
    public string AjaxLoading(UrlHelper urlHelper)
    {
    return urlHelper.Content("~/Images/loading2.gif");
    }
    }

    最佳答案

    回答您的问题:

  • 有很多方法可以为您创建 ASP.NET MVC 导航链接,适合您的是最好的。
  • 大多数人会回答类文件应该放在模型文件夹中。我发现将 ViewModel 类放在单独的文件夹中并将整个应用程序(应用程序的业务逻辑/内容)使用的类放在单独的文件中更有意义。
  • 您要完成的工作似乎是扩展方法的工作。这是一个很好的教程:http://www.dotnetcurry.com/ShowArticle.aspx?ID=406&AspxAutoDetectCookieSupport=1

  • 您正在做的是在正确的轨道上,但是,您需要创建静态类和静态函数/方法才能使其正常工作。

    http://msdn.microsoft.com/en-us/library/bb383977.aspx有一些关于扩展方法的一般信息。

    一个快速说明:要允许使用您创建的所有扩展方法,您需要引用放置它们的类/命名空间。

    有两种方法可以做到这一点:
  • 假设您已将扩展方法放在 MvcApplication1.MyExtensionMethods 中,请在
      <page>
    <namespaces>

    应用程序的 web.config 中的标记(不是 View 的 web.config 文件)
         <add namespace="MvcApplication1.MyExtensionMethods"/>

    这样做将允许在所有 View (.aspx/.ascx) 文件中使用扩展方法。
  • 地方
      <%@ Import Namespace="MvcApplication1.MyExtensionMethods" %>

    在 .aspx/.ascx 文件的顶部。您需要为每个需要使用扩展方法的文件执行此操作(效率不高)

  • 以下是我实现的内容,到目前为止,它对我很有帮助。

    导航链接.cs
       public class NavigationLink
    {
    string Text {get; set;}
    RouteValueDictionary Routes {get; set;}
    string RouteName {get; set;}
    }

    NavigationLink.ascx(放置在共享文件夹中以便在整个应用程序中轻松访问)

    (注意:我将链接包裹在 < li> 标签中,因为我对所有导航控件都使用列表。然后您可以将这些链接放在任何类型的列表中,从而允许自由使用列表的类/样式。)
       <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<NavigationLink>>">

    <% foreach(NavigationLink n in Model){ %>
    <li>
    <a href="<%= string.IsNullOrEmpty(n.RouteName) ? Url.RouteUrl(Routes) : Url.RouteUrl(RouteName) %>">
    <%= n.Text %>
    </a>
    </li>
    <% } %>

    Menus.cs(一些示例)
      public static Menus
    {
    public static List<NavigationLink> MainMenu()
    {
    List<NavigationLink> links = new List<NavigationLink>();
    links.Add(new NavigationLink{
    Text = "Home",
    Routes = new RouteValueDictionary(new { action="Index", controller="Home" })
    });
    return links;
    }

    public static List<NavigationLink> UserMenu()
    {
    List<NavigationLink> links = new List<NavigationLink>();
    links.Add(new NavigationLink{
    Text = "Messages",
    Routes = new RouteValueDictionary(new { action="Messages", controller="UserCP" })
    });
    links.Add(new NavigationLink{
    Text = "Account",
    Routes = new RouteValueDictionary(new { action="Account", controller="UserCP" })
    });
    return links;
    }

    }

    现在您已经完成了所有设置,调用这些函数很简单:

    在您的 View 文件 (.aspx/.ascx) 中
      <ul class="horizontal_menu">
    <% Html.RenderPartial("NavigationLink", MyMvcApplication1.Menus.MainMenu()) %>
    </ul>

    像这样设置允许创建不同的局部 View 以不同的方式呈现导航链接列表,并且需要您只构建局部 View 并调用它。

    关于asp.net-mvc - 为 MVC 创建 Web 导航助手类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1718591/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com