65.9K
CodeProject 正在变化。 阅读更多。
Home

ASP.NET WebForms 也能实现友好的 URL!

starIconstarIconstarIconstarIconemptyStarIcon

4.00/5 (1投票)

2013 年 2 月 17 日

Ms-PL

3分钟阅读

viewsIcon

27499

在本文中,我将介绍 ASP.NET WebForms 中的 FriendlyUrls 的概念。我们将了解如何从格式化的 URL 字符串中检索数据,以便使用它。我们还将简要介绍 ASP.NET 4.5 中的 ValueProviders 以呈现一些数据。

随着 ASP.NET 4.5 版本的发布,我们看到了声明式模型绑定、值提供程序、非侵入式验证和模型状态的加入。虽然其中一些功能是从 MVC 框架移植过来的,但我们仍然缺少那种酷炫的 SEO 友好的 URL 格式。随着 ASP.NET 2012.2 的发布,微软满足了这一需求。

通过安装带有命令的 NuGet 包,可以将 FriendlyURLs 功能添加到任何 ASP.NET WebForms 4 项目中

Install-Package Microsoft.AspNet.FriendlyUrls -Pre

如果您当前没有在您的 WebForms 项目中使用路由,您将需要添加一个调用来配置路由。如果您熟悉 MVC,您应该认识到这个代码片段在 global.asax.cs 文件中

RouteConfig.RegisterRoutes(RouteTable.Routes);

App_Start 文件夹中 RouteConfig.cs 文件的内容应该类似于

public static class RouteConfig
{
  public static void RegisterRoutes(RouteCollection routes)
  {
    routes.EnableFriendlyUrls(new FriendlyUrlSettings()
    {
      AutoRedirectMode = RedirectMode.Permanent,
      CachingMode = CachingMode.Dynamic
    });
  }
}

我添加了配置选项,以使从 FriendlyUrl 路由进行的重定向成为永久性的(HTTP 301 状态码),然后动态缓存输出内容。有了这个配置,我现在可以将用户路由到看起来很酷并且对 SEO 友好的 URL,例如

我知道你在想:Jeff,在 MVC 中,我通过作为输入参数的操作方法获取来自请求的条目,我如何从 WebForm 访问这些值? FriendlyUrls 的实现包括一个针对 Request 对象的扩展方法,名为 GetFriendlyUrlSegments ,它返回一个 IList<string>。很好,如果你 真的 想遍历整个 URL 并解析提交的内容,但我认为还有一些你更喜欢的东西。

输入 ValueProviders

ValueProviders 是参数级别的属性,可用于修饰 WebForms 中的方法。使用 FriendlyUrlSegments 属性,我可以在 WebForm 中配置一个 public 方法,以根据在 URL 上提交的值提供内容。考虑这个简单的 WebForm

我可以使用 ASP.NET 4.5 中的一个新功能,将我的 Product 业务对象直接绑定到 FormView 控件。我所需要做的就是指定 ItemTypeSelectMethod 属性来绑定用于读取操作的数据。ItemType 是被绑定的类的限定名称。SelectMethod 是代码隐藏中的 public 方法,它将返回要呈现的业务对象(在本例中为 Product)。请注意,我正在使用 Item 关键字绑定到 Product。这将创建一个单向绑定,类似于我们使用 Eval 关键字的方式。还有一个 BindItem 关键字可用,它执行我们熟悉的双向绑定,即 Bind 关键字给我们的。

让我们看看 GetProduct 方法

public static readonly List<product> ProductList = new List<product>()
{
  new Product
  {
    Id=1,
    Name="Chess",
    Description="The classic game - you know... Chess!",
    Price=9.99M
  }
};

public Product GetProduct([FriendlyUrlSegments]int? id)
{
  if (id == null)
    return null;

  return ProductList.FirstOrDefault(p => p.Id == id.Value);
}

现在我们看到了当 WebForm 呈现时,我的 FormView 准备好绑定数据时,FriendlyUrlSegments 值提供程序是如何被使用的。我不需要费心事件时序、回发或视图状态。当 FormView 准备好呈现时,WebForm 将适当地从 FriendlyUrl 传递参数作为输入参数。在这种情况下,我最终得到一个简单的网页,它告诉我关于 Chess 产品的信息

摘要

在本文中,我们介绍了 ASP.NET WebForms 中 FriendlyUrl 的概念。我向您展示了如何从格式化的 URL string 中检索数据,以便使用它。我们还简要介绍了 ASP.NET 4.5 中的 ValueProviders,并使用 FriendlyUrls 属性和一些标准 FormView 上的声明式数据绑定来呈现一些数据。

下次,我们将深入研究 ASP.NET 4.5 中的 ValueProviders 和 ModelBinding

© . All rights reserved.