/// <summary> /// When overridden in a derived class, checks whether the route matches the specified values, and if so, generates a /// URL and retrieves information about the route. /// </summary> /// <param name="requestContext">An object that encapsulates information about the requested route.</param> /// <param name="values">An object that contains the parameters for a route.</param> /// <returns> /// An object that contains the generated URL and information about the route, or null if the route does not match /// <paramref name="values" />. /// </returns> public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values) { var model = values[CurrentPageKey] as IPage; if (model == null) { return(null); } var vpd = new VirtualPathData(this, VirtualPathResolver.Resolve(model, values)); vpd.VirtualPath = string.Format("/ui/pages".TrimStart(new[] { '/' }) + "/{0}", vpd.VirtualPath); string queryParams = String.Empty; // add query string parameters foreach (var kvp in values) { if (kvp.Key.Equals(CurrentPageKey) || kvp.Key.Equals(ControllerKey) || kvp.Key.Equals(ActionKey)) { continue; } queryParams = queryParams.AddQueryParam(kvp.Key, kvp.Value.ToString()); } vpd.VirtualPath += queryParams; return(vpd); }
public void Can_Append_Action_To_Url() { // Given var page = new FakePage { Metadata = { Url = "foo/bar/fudge" } }; var resolver = new VirtualPathResolver(); // When var result = resolver.Resolve(page, new RouteValueDictionary(new { action = "comment" })); // Then Assert.Equal("foo/bar/fudge/comment/", result); }
public void Can_Resolve_Virtual_Path() { // Given var page = new FakePage {Metadata = { Url = "foo/bar/fudge"}}; var resolver = new VirtualPathResolver(); // When var result = resolver.Resolve(page, new RouteValueDictionary( new { action = "index" } )); // Then Assert.Equal("foo/bar/fudge/", result); }
public void Can_Resolve_Virtual_Path_With_Default_Action() { // Arrange IPage model = new FakePage { Metadata = { Url = "page1/page2" } }; var routeValueDictionary = new RouteValueDictionary(); // Act var virtualPathResolver = new VirtualPathResolver(); var virtualPath = virtualPathResolver.Resolve(model, routeValueDictionary); // Assert Assert.AreEqual("page1/page2/", virtualPath); }