2009-11-11 42 views
2

我是MVC的新手,并试图在我的MVC应用程序中使用Web导航器类。 http://polymorphicpodcast.com/shows/webnavigator/ 该类使我们能够在中心类文件中输入强类型的URL。为MVC创建Web导航助手类

我有3个问题:

  1. 这是在MVC存储 强烈输入网址的最佳途径或不
    MVC有一些特殊的辅助方法 它做同样的事情。

  2. 什么是类 文件如的视图/模型或
    控制器

  3. 下面去最好的地方是导航 类的样品返回正确的网址 图像文件。 而不是将UrlHelper对象传递给我想要 在上下文(当前上下文)中运行此类 类。什么是 这是做这件事的最好方法。对于图像

样品导航类:

using System.Web; 
using System.Web.Mvc; 

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

回答

3

回答您的问题:

  1. 有许多方法来创建导航链接你的ASP.NET MVC,无论为你工作是最好的。

  2. 大多数人会回答说,类文件应放置在模型文件夹中。我发现将ViewModel类放在单独的文件夹中,并将整个应用程序中使用的类(应用程序的业务逻辑/肉)放置在单独的文件中更有意义。

  3. 你想要完成的事情看起来像是扩展方法的工作。这里是一个很好的教程:http://www.dotnetcurry.com/ShowArticle.aspx?ID=406&AspxAutoDetectCookieSupport=1

你在做什么是正确的轨道上,但是,你需要创建静态类,并使其正常工作静态函数/方法。

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

一个快速注:为了使您创建的所有扩展方法的使用,你需要引用的类/命名空间,你把他们安置在

这样做有两种方法:

  1. 假设您已经摆在你的MvcApplication1.MyExtensionMethods扩展方法,添加在应用程序的web.config中

    <page> 
         <namespaces> 
    

    标签后,以下(不是视图的网页。配置文件)

     <add namespace="MvcApplication1.MyExtensionMethods"/> 
    

    这样做将允许在所有视图(.aspx/.ascx)文件中使用扩展方法。

  2. 广场

    <%@ Import Namespace="MvcApplication1.MyExtensionMethods" %> 
    

    在你的.aspx/.ascx文件的顶部。您需要为每一个你需要使用的(效率不高)的扩展方法文件做

下面是我实现它已使我受益匪浅迄今。

NavigationLink.cs

public class NavigationLink 
    { 
     string Text {get; set;} 
     RouteValueDictionary Routes {get; set;} 
     string RouteName {get; set;} 
    } 

NavigationLink.ascx(共享文件夹放置在整个应用程序方便地访问)

(注:我包的链接在< LI> </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; 
     } 

    } 

现在,你拥有了一切设置,调用这些函数是简单的:

在视图文件(的.aspx /的.ascx)

<ul class="horizontal_menu"> 
     <% Html.RenderPartial("NavigationLink", MyMvcApplication1.Menus.MainMenu()) %> 
    </ul> 

像这样设置,可以创建不同的局部视图,以不同的方式渲染导航链接列表,并要求您只创建局部并调用它。

+0

感谢您的回复。对于我的回应延迟抱歉。你的解决方案适合我。 – ace 2009-12-01 01:40:29

+0

感谢您分享您的方法。有很多方法可以做某些事情,所以看到某个人实际使用的方法是非常有用的。 – Cymen 2010-02-24 03:47:31