Umbraco-动态页面

Umbraco-动态页面,umbraco,Umbraco,我希望有人能在我计划做的事情上给我一些帮助 我想创建一个动态的“City.aspx”页面,该页面接受url参数,并基于该特定城市动态生成页面 例如,如果有人叫“City.aspx?City=london”,那么它将构建一个包含与伦敦相关的自定义内容的页面,如果有人叫“City.aspx?City=manchester”,那么它将构建包含与曼彻斯特相关内容的页面 我已经研究过构建站点地图和UrlRewriting,我非常确定我可以用一个参数重定向到这个新页面,但不知道下一步需要做什么 有人能帮忙吗

我希望有人能在我计划做的事情上给我一些帮助

我想创建一个动态的“City.aspx”页面,该页面接受url参数,并基于该特定城市动态生成页面

例如,如果有人叫“City.aspx?City=london”,那么它将构建一个包含与伦敦相关的自定义内容的页面,如果有人叫“City.aspx?City=manchester”,那么它将构建包含与曼彻斯特相关内容的页面

我已经研究过构建站点地图和UrlRewriting,我非常确定我可以用一个参数重定向到这个新页面,但不知道下一步需要做什么

有人能帮忙吗

谢谢


滑行路线

如果您拥有标准Umbraco内容之外的信息,并且这些信息对于每个城市都是动态的,那么只需编写一个或多个宏(或局部视图?)即可通过“city”get参数获取动态数据。然后,您可以使用URL重写使URL看起来像标准网页(/city/london.aspx)。URL重写将使该URL在服务器上显示为:/city.aspx?city=london。()


在宏中,可以通过括号语法()将“city”get参数作为宏参数传递给宏。或者,您可以通过请求变量(razor)或Umbraco.library(XSLT)获取city参数

我建议您创建url,如/city/london/1234,其中最后一部分是文档的ID。 通过使用Umbraco中的内置url重写功能,可以在内部将url重写为/city.aspx?name=london&id=1234 在/config/Urlewriting.config中,可以添加重写规则。 对于以上内容,您需要以下内容:

 <add name="city_rewrite"
       virtualUrl="^~/city/(.*)/(.*)"
       rewriteUrlParameter="ExcludeFromClientQueryString"
       destinationUrl="~/city.aspx?name=$1&amp;cityid=$2"
       ignoreCase="true" />

这是一个.NET宏,但您当然可以使用XSLT或Razor代码执行同样的操作。

城市和Id不是多余的吗?当然,在宏中编写代码更容易。城市和ID确实是多余的,但对于SEO来说,城市的名称更好,如果您想从Umbraco获得节点,则更容易使用节点ID,因为ID是唯一的,节点名称不必是唯一的。
    // get the city Document Id from the querystring
    string cityID = HttpContext.Current.Request.QueryString["cityid"];

    if (!string.IsNullOrWhiteSpace(cityId))
    {
      // get the cityNode
      Node cityNode = new Node(cityId);
      // do whatever you want with this node, like display it's data
    }