回答您的问题:
有许多方法来创建导航链接你的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扩展方法,添加在应用程序的web.config中
<page>
<namespaces>
标签后,以下(不是视图的网页。配置文件)
<add namespace="MvcApplication1.MyExtensionMethods"/>
这样做将允许在所有视图(.aspx/.ascx)文件中使用扩展方法。
广场
<%@ 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>
像这样设置,可以创建不同的局部视图,以不同的方式渲染导航链接列表,并要求您只创建局部并调用它。
感谢您的回复。对于我的回应延迟抱歉。你的解决方案适合我。 – ace 2009-12-01 01:40:29
感谢您分享您的方法。有很多方法可以做某些事情,所以看到某个人实际使用的方法是非常有用的。 – Cymen 2010-02-24 03:47:31