我是MVC的新手并试图在我的MVC应用程序中使用web navigator类。 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");
}
}
答案 0 :(得分:3)
回答你的问题:
有很多方法可以为ASP.NET MVC创建导航链接,无论哪种方式都是最适合您的。
大多数人会回答类文件应该放在Model文件夹中。我发现将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"/>
这样做将允许在所有视图(.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(放置在共享文件夹中以便在整个应用程序中轻松访问)
(注意:我将链接包含在&lt; li&gt;&lt; / li&gt;标签中,因为我为所有导航控件使用了列表。然后您可以将这些链接放在任何类型的列表中,从而允许自由使用列表的类/式。)
<%@ 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>
设置这样的设置允许创建不同的部分视图,以不同的方式呈现导航链接列表,并且需要您只构建部分并调用它。