parent
a2561281b7
commit
47d227cbf2
|
|
@ -26,7 +26,7 @@ namespace Microsoft.AspNet.Mvc
|
|||
var viewEngine = ViewEngine ?? context.HttpContext.RequestServices.GetService<ICompositeViewEngine>();
|
||||
|
||||
var viewName = ViewName ?? context.ActionDescriptor.Name;
|
||||
var view = FindView(viewEngine, context.RouteData.Values, viewName);
|
||||
var view = FindView(viewEngine, context, viewName);
|
||||
|
||||
using (view as IDisposable)
|
||||
{
|
||||
|
|
@ -52,10 +52,7 @@ namespace Microsoft.AspNet.Mvc
|
|||
}
|
||||
}
|
||||
|
||||
private static IView FindView(
|
||||
[NotNull] IViewEngine viewEngine,
|
||||
[NotNull] IDictionary<string, object> context,
|
||||
[NotNull] string viewName)
|
||||
private static IView FindView(IViewEngine viewEngine, ActionContext context, string viewName)
|
||||
{
|
||||
var result = viewEngine.FindView(context, viewName);
|
||||
if (!result.Success)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
|
||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
|
|
@ -21,20 +20,20 @@ namespace Microsoft.AspNet.Mvc.Rendering
|
|||
public IReadOnlyList<IViewEngine> ViewEngines { get; private set; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public ViewEngineResult FindPartialView([NotNull] IDictionary<string, object> context,
|
||||
public ViewEngineResult FindPartialView([NotNull] ActionContext context,
|
||||
[NotNull] string partialViewName)
|
||||
{
|
||||
return FindView(context, partialViewName, partial: true);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public ViewEngineResult FindView([NotNull] IDictionary<string, object> context,
|
||||
public ViewEngineResult FindView([NotNull] ActionContext context,
|
||||
[NotNull] string viewName)
|
||||
{
|
||||
return FindView(context, viewName, partial: false);
|
||||
}
|
||||
|
||||
private ViewEngineResult FindView(IDictionary<string, object> context,
|
||||
private ViewEngineResult FindView(ActionContext context,
|
||||
string viewName,
|
||||
bool partial)
|
||||
{
|
||||
|
|
@ -48,6 +47,7 @@ namespace Microsoft.AspNet.Mvc.Rendering
|
|||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
searchedLocations = searchedLocations.Concat(result.SearchedLocations);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -381,7 +381,7 @@ namespace Microsoft.AspNet.Mvc.Rendering
|
|||
|
||||
var newViewData = new ViewDataDictionary(baseViewData, model);
|
||||
|
||||
var viewEngineResult = _viewEngine.FindPartialView(ViewContext.RouteData.Values, partialViewName);
|
||||
var viewEngineResult = _viewEngine.FindPartialView(ViewContext, partialViewName);
|
||||
if (!viewEngineResult.Success)
|
||||
{
|
||||
var locations = string.Empty;
|
||||
|
|
|
|||
|
|
@ -88,8 +88,7 @@ namespace Microsoft.AspNet.Mvc.Rendering
|
|||
{
|
||||
var fullViewName = modeViewPath + "/" + viewName;
|
||||
|
||||
// Forcing synchronous behavior so users don't have to await templates.
|
||||
var viewEngineResult = _viewEngine.FindPartialView(_viewContext.RouteData.Values, fullViewName);
|
||||
var viewEngineResult = _viewEngine.FindPartialView(_viewContext, fullViewName);
|
||||
if (viewEngineResult.Success)
|
||||
{
|
||||
using (var writer = new StringWriter(CultureInfo.InvariantCulture))
|
||||
|
|
|
|||
|
|
@ -1,16 +1,27 @@
|
|||
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
|
||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Microsoft.AspNet.Mvc.Rendering
|
||||
{
|
||||
/// <summary>
|
||||
/// Defines the contract for a view engine.
|
||||
/// </summary>
|
||||
public interface IViewEngine
|
||||
{
|
||||
ViewEngineResult FindView([NotNull] IDictionary<string, object> context, [NotNull] string viewName);
|
||||
/// <summary>
|
||||
/// Finds the specified view by using the specified action context.
|
||||
/// </summary>
|
||||
/// <param name="context">The action context.</param>
|
||||
/// <param name="viewName">The name or full path to the view.</param>
|
||||
/// <returns>A result representing the result of locating the view.</returns>
|
||||
ViewEngineResult FindView(ActionContext context, string viewName);
|
||||
|
||||
ViewEngineResult FindPartialView(
|
||||
[NotNull] IDictionary<string, object> context,
|
||||
[NotNull] string partialViewName);
|
||||
/// <summary>
|
||||
/// Finds the specified partial view by using the specified action context.
|
||||
/// </summary>
|
||||
/// <param name="context">The action context.</param>
|
||||
/// <param name="viewName">The name or full path to the view.</param>
|
||||
/// <returns>A result representing the result of locating the view.</returns>
|
||||
ViewEngineResult FindPartialView(ActionContext context, string partialViewName);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@ namespace Microsoft.AspNet.Mvc
|
|||
ViewName ?? "Default");
|
||||
}
|
||||
|
||||
var view = FindView(context.ViewContext.RouteData.Values, qualifiedViewName);
|
||||
var view = FindView(context.ViewContext, qualifiedViewName);
|
||||
|
||||
var childViewContext = new ViewContext(
|
||||
context.ViewContext,
|
||||
|
|
@ -75,7 +75,7 @@ namespace Microsoft.AspNet.Mvc
|
|||
}
|
||||
}
|
||||
|
||||
private IView FindView([NotNull] IDictionary<string, object> context, [NotNull] string viewName)
|
||||
private IView FindView(ActionContext context, string viewName)
|
||||
{
|
||||
var result = _viewEngine.FindView(context, viewName);
|
||||
if (!result.Success)
|
||||
|
|
|
|||
|
|
@ -9,6 +9,9 @@ using Microsoft.AspNet.Mvc.Rendering;
|
|||
|
||||
namespace Microsoft.AspNet.Mvc.Razor
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents a view engine that is used to render a page that uses the Razor syntax.
|
||||
/// </summary>
|
||||
public class RazorViewEngine : IViewEngine
|
||||
{
|
||||
private const string ViewExtension = ".cshtml";
|
||||
|
|
@ -27,15 +30,22 @@ namespace Microsoft.AspNet.Mvc.Razor
|
|||
};
|
||||
|
||||
private readonly IRazorPageFactory _pageFactory;
|
||||
private readonly IRazorPageActivator _viewActivator;
|
||||
private readonly IRazorPageActivator _pageActivator;
|
||||
private readonly IViewStartProvider _viewStartProvider;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the RazorViewEngine class.
|
||||
/// </summary>
|
||||
/// <param name="pageFactory">The page factory used for creating <see cref="IRazorPage"/>.</param>
|
||||
/// <param name="pageActivator">Activator for activated instances of <see cref="IRazorPage"/>.</param>
|
||||
/// <param name="viewStartProvider">The provider used to provide instances of ViewStarts applicable to the
|
||||
/// page being rendered.</param>
|
||||
public RazorViewEngine(IRazorPageFactory pageFactory,
|
||||
IRazorPageActivator viewActivator,
|
||||
IRazorPageActivator pageActivator,
|
||||
IViewStartProvider viewStartProvider)
|
||||
{
|
||||
_pageFactory = pageFactory;
|
||||
_viewActivator = viewActivator;
|
||||
_pageActivator = pageActivator;
|
||||
_viewStartProvider = viewStartProvider;
|
||||
}
|
||||
|
||||
|
|
@ -44,21 +54,23 @@ namespace Microsoft.AspNet.Mvc.Razor
|
|||
get { return _viewLocationFormats; }
|
||||
}
|
||||
|
||||
public ViewEngineResult FindView([NotNull] IDictionary<string, object> context,
|
||||
/// <inheritdoc />
|
||||
public ViewEngineResult FindView([NotNull] ActionContext context,
|
||||
[NotNull] string viewName)
|
||||
{
|
||||
var viewEngineResult = CreateViewEngineResult(context, viewName, partial: false);
|
||||
return viewEngineResult;
|
||||
}
|
||||
|
||||
public ViewEngineResult FindPartialView([NotNull] IDictionary<string, object> context,
|
||||
/// <inheritdoc />
|
||||
public ViewEngineResult FindPartialView([NotNull] ActionContext context,
|
||||
[NotNull] string partialViewName)
|
||||
{
|
||||
return CreateViewEngineResult(context, partialViewName, partial: true);
|
||||
}
|
||||
|
||||
private ViewEngineResult CreateViewEngineResult([NotNull] IDictionary<string, object> context,
|
||||
[NotNull] string viewName,
|
||||
private ViewEngineResult CreateViewEngineResult(ActionContext context,
|
||||
string viewName,
|
||||
bool partial)
|
||||
{
|
||||
var nameRepresentsPath = IsSpecificPath(viewName);
|
||||
|
|
@ -78,8 +90,9 @@ namespace Microsoft.AspNet.Mvc.Razor
|
|||
}
|
||||
else
|
||||
{
|
||||
var controllerName = context.GetValueOrDefault<string>("controller");
|
||||
var areaName = context.GetValueOrDefault<string>("area");
|
||||
var routeValues = context.RouteData.Values;
|
||||
var controllerName = routeValues.GetValueOrDefault<string>("controller");
|
||||
var areaName = routeValues.GetValueOrDefault<string>("area");
|
||||
var potentialPaths = GetViewSearchPaths(viewName, controllerName, areaName);
|
||||
|
||||
foreach (var path in potentialPaths)
|
||||
|
|
@ -98,9 +111,9 @@ namespace Microsoft.AspNet.Mvc.Razor
|
|||
private ViewEngineResult CreateFoundResult(IRazorPage page, string viewName, bool partial)
|
||||
{
|
||||
var view = new RazorView(_pageFactory,
|
||||
_viewActivator,
|
||||
_pageActivator,
|
||||
_viewStartProvider,
|
||||
page,
|
||||
page,
|
||||
executeViewHierarchy: !partial);
|
||||
return ViewEngineResult.Found(viewName, view);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -64,12 +64,12 @@ namespace Microsoft.AspNet.Mvc.Rendering
|
|||
|
||||
private class TestViewEngine : IViewEngine
|
||||
{
|
||||
public ViewEngineResult FindPartialView([NotNull]IDictionary<string, object> context, [NotNull]string partialViewName)
|
||||
public ViewEngineResult FindPartialView(ActionContext context, string partialViewName)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public ViewEngineResult FindView([NotNull]IDictionary<string, object> context, [NotNull]string viewName)
|
||||
public ViewEngineResult FindView(ActionContext context, string viewName)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@
|
|||
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Microsoft.AspNet.Http;
|
||||
using Microsoft.AspNet.Routing;
|
||||
using Moq;
|
||||
using Xunit;
|
||||
|
||||
|
|
@ -18,16 +20,18 @@ namespace Microsoft.AspNet.Mvc.Rendering
|
|||
var provider = new Mock<IViewEngineProvider>();
|
||||
provider.SetupGet(p => p.ViewEngines)
|
||||
.Returns(new IViewEngine[0]);
|
||||
var actionContext = GetActionContext();
|
||||
var compositeViewEngine = new CompositeViewEngine(provider.Object);
|
||||
|
||||
// Act
|
||||
var result = compositeViewEngine.FindView(new Dictionary<string, object>(), viewName);
|
||||
var result = compositeViewEngine.FindView(actionContext, viewName);
|
||||
|
||||
// Assert
|
||||
Assert.False(result.Success);
|
||||
Assert.Empty(result.SearchedLocations);
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
public void FindView_ReturnsNotFoundResult_WhenExactlyOneViewEngineIsRegisteredWhichReturnsNotFoundResult()
|
||||
{
|
||||
|
|
@ -35,14 +39,14 @@ namespace Microsoft.AspNet.Mvc.Rendering
|
|||
var viewName = "test-view";
|
||||
var provider = new Mock<IViewEngineProvider>();
|
||||
var engine = new Mock<IViewEngine>();
|
||||
engine.Setup(e => e.FindView(It.IsAny<IDictionary<string, object>>(), It.IsAny<string>()))
|
||||
engine.Setup(e => e.FindView(It.IsAny<ActionContext>(), It.IsAny<string>()))
|
||||
.Returns(ViewEngineResult.NotFound(viewName, new[] { "controller/test-view" }));
|
||||
provider.SetupGet(p => p.ViewEngines)
|
||||
.Returns(new[] { engine.Object });
|
||||
var compositeViewEngine = new CompositeViewEngine(provider.Object);
|
||||
|
||||
// Act
|
||||
var result = compositeViewEngine.FindView(new Dictionary<string, object>(), viewName);
|
||||
var result = compositeViewEngine.FindView(GetActionContext(), viewName);
|
||||
|
||||
// Assert
|
||||
Assert.False(result.Success);
|
||||
|
|
@ -57,14 +61,14 @@ namespace Microsoft.AspNet.Mvc.Rendering
|
|||
var provider = new Mock<IViewEngineProvider>();
|
||||
var engine = new Mock<IViewEngine>();
|
||||
var view = Mock.Of<IView>();
|
||||
engine.Setup(e => e.FindView(It.IsAny<IDictionary<string, object>>(), It.IsAny<string>()))
|
||||
engine.Setup(e => e.FindView(It.IsAny<ActionContext>(), It.IsAny<string>()))
|
||||
.Returns(ViewEngineResult.Found(viewName, view));
|
||||
provider.SetupGet(p => p.ViewEngines)
|
||||
.Returns(new[] { engine.Object });
|
||||
var compositeViewEngine = new CompositeViewEngine(provider.Object);
|
||||
|
||||
// Act
|
||||
var result = compositeViewEngine.FindView(new Dictionary<string, object>(), viewName);
|
||||
var result = compositeViewEngine.FindView(GetActionContext(), viewName);
|
||||
|
||||
// Assert
|
||||
Assert.True(result.Success);
|
||||
|
|
@ -81,11 +85,11 @@ namespace Microsoft.AspNet.Mvc.Rendering
|
|||
var engine3 = new Mock<IViewEngine>();
|
||||
var view2 = Mock.Of<IView>();
|
||||
var view3 = Mock.Of<IView>();
|
||||
engine1.Setup(e => e.FindView(It.IsAny<IDictionary<string, object>>(), It.IsAny<string>()))
|
||||
engine1.Setup(e => e.FindView(It.IsAny<ActionContext>(), It.IsAny<string>()))
|
||||
.Returns(ViewEngineResult.NotFound(viewName, Enumerable.Empty<string>()));
|
||||
engine2.Setup(e => e.FindView(It.IsAny<IDictionary<string, object>>(), It.IsAny<string>()))
|
||||
engine2.Setup(e => e.FindView(It.IsAny<ActionContext>(), It.IsAny<string>()))
|
||||
.Returns(ViewEngineResult.Found(viewName, view2));
|
||||
engine3.Setup(e => e.FindView(It.IsAny<IDictionary<string, object>>(), It.IsAny<string>()))
|
||||
engine3.Setup(e => e.FindView(It.IsAny<ActionContext>(), It.IsAny<string>()))
|
||||
.Returns(ViewEngineResult.Found(viewName, view3));
|
||||
|
||||
var provider = new Mock<IViewEngineProvider>();
|
||||
|
|
@ -94,7 +98,7 @@ namespace Microsoft.AspNet.Mvc.Rendering
|
|||
var compositeViewEngine = new CompositeViewEngine(provider.Object);
|
||||
|
||||
// Act
|
||||
var result = compositeViewEngine.FindView(new Dictionary<string, object>(), viewName);
|
||||
var result = compositeViewEngine.FindView(GetActionContext(), viewName);
|
||||
|
||||
// Assert
|
||||
Assert.True(result.Success);
|
||||
|
|
@ -110,11 +114,11 @@ namespace Microsoft.AspNet.Mvc.Rendering
|
|||
var engine1 = new Mock<IViewEngine>();
|
||||
var engine2 = new Mock<IViewEngine>();
|
||||
var engine3 = new Mock<IViewEngine>();
|
||||
engine1.Setup(e => e.FindView(It.IsAny<IDictionary<string, object>>(), It.IsAny<string>()))
|
||||
engine1.Setup(e => e.FindView(It.IsAny<ActionContext>(), It.IsAny<string>()))
|
||||
.Returns(ViewEngineResult.NotFound(viewName, new[] { "1", "2" }));
|
||||
engine2.Setup(e => e.FindView(It.IsAny<IDictionary<string, object>>(), It.IsAny<string>()))
|
||||
engine2.Setup(e => e.FindView(It.IsAny<ActionContext>(), It.IsAny<string>()))
|
||||
.Returns(ViewEngineResult.NotFound(viewName, new[] { "3" }));
|
||||
engine3.Setup(e => e.FindView(It.IsAny<IDictionary<string, object>>(), It.IsAny<string>()))
|
||||
engine3.Setup(e => e.FindView(It.IsAny<ActionContext>(), It.IsAny<string>()))
|
||||
.Returns(ViewEngineResult.NotFound(viewName, new[] { "4", "5" }));
|
||||
|
||||
var provider = new Mock<IViewEngineProvider>();
|
||||
|
|
@ -123,7 +127,7 @@ namespace Microsoft.AspNet.Mvc.Rendering
|
|||
var compositeViewEngine = new CompositeViewEngine(provider.Object);
|
||||
|
||||
// Act
|
||||
var result = compositeViewEngine.FindView(new Dictionary<string, object>(), viewName);
|
||||
var result = compositeViewEngine.FindView(GetActionContext(), viewName);
|
||||
|
||||
// Assert
|
||||
Assert.False(result.Success);
|
||||
|
|
@ -141,7 +145,7 @@ namespace Microsoft.AspNet.Mvc.Rendering
|
|||
var compositeViewEngine = new CompositeViewEngine(provider.Object);
|
||||
|
||||
// Act
|
||||
var result = compositeViewEngine.FindPartialView(new Dictionary<string, object>(), viewName);
|
||||
var result = compositeViewEngine.FindPartialView(GetActionContext(), viewName);
|
||||
|
||||
// Assert
|
||||
Assert.False(result.Success);
|
||||
|
|
@ -155,14 +159,14 @@ namespace Microsoft.AspNet.Mvc.Rendering
|
|||
var viewName = "partial-view";
|
||||
var provider = new Mock<IViewEngineProvider>();
|
||||
var engine = new Mock<IViewEngine>();
|
||||
engine.Setup(e => e.FindPartialView(It.IsAny<IDictionary<string, object>>(), It.IsAny<string>()))
|
||||
engine.Setup(e => e.FindPartialView(It.IsAny<ActionContext>(), It.IsAny<string>()))
|
||||
.Returns(ViewEngineResult.NotFound(viewName, new[] { "shared/partial-view" }));
|
||||
provider.SetupGet(p => p.ViewEngines)
|
||||
.Returns(new[] { engine.Object });
|
||||
var compositeViewEngine = new CompositeViewEngine(provider.Object);
|
||||
|
||||
// Act
|
||||
var result = compositeViewEngine.FindPartialView(new Dictionary<string, object>(), viewName);
|
||||
var result = compositeViewEngine.FindPartialView(GetActionContext(), viewName);
|
||||
|
||||
// Assert
|
||||
Assert.False(result.Success);
|
||||
|
|
@ -177,14 +181,14 @@ namespace Microsoft.AspNet.Mvc.Rendering
|
|||
var provider = new Mock<IViewEngineProvider>();
|
||||
var engine = new Mock<IViewEngine>();
|
||||
var view = Mock.Of<IView>();
|
||||
engine.Setup(e => e.FindPartialView(It.IsAny<IDictionary<string, object>>(), It.IsAny<string>()))
|
||||
engine.Setup(e => e.FindPartialView(It.IsAny<ActionContext>(), It.IsAny<string>()))
|
||||
.Returns(ViewEngineResult.Found(viewName, view));
|
||||
provider.SetupGet(p => p.ViewEngines)
|
||||
.Returns(new[] { engine.Object });
|
||||
var compositeViewEngine = new CompositeViewEngine(provider.Object);
|
||||
|
||||
// Act
|
||||
var result = compositeViewEngine.FindPartialView(new Dictionary<string, object>(), viewName);
|
||||
var result = compositeViewEngine.FindPartialView(GetActionContext(), viewName);
|
||||
|
||||
// Assert
|
||||
Assert.True(result.Success);
|
||||
|
|
@ -201,11 +205,11 @@ namespace Microsoft.AspNet.Mvc.Rendering
|
|||
var engine3 = new Mock<IViewEngine>();
|
||||
var view2 = Mock.Of<IView>();
|
||||
var view3 = Mock.Of<IView>();
|
||||
engine1.Setup(e => e.FindPartialView(It.IsAny<IDictionary<string, object>>(), It.IsAny<string>()))
|
||||
engine1.Setup(e => e.FindPartialView(It.IsAny<ActionContext>(), It.IsAny<string>()))
|
||||
.Returns(ViewEngineResult.NotFound(viewName, Enumerable.Empty<string>()));
|
||||
engine2.Setup(e => e.FindPartialView(It.IsAny<IDictionary<string, object>>(), It.IsAny<string>()))
|
||||
engine2.Setup(e => e.FindPartialView(It.IsAny<ActionContext>(), It.IsAny<string>()))
|
||||
.Returns(ViewEngineResult.Found(viewName, view2));
|
||||
engine3.Setup(e => e.FindPartialView(It.IsAny<IDictionary<string, object>>(), It.IsAny<string>()))
|
||||
engine3.Setup(e => e.FindPartialView(It.IsAny<ActionContext>(), It.IsAny<string>()))
|
||||
.Returns(ViewEngineResult.Found(viewName, view3));
|
||||
|
||||
var provider = new Mock<IViewEngineProvider>();
|
||||
|
|
@ -214,7 +218,7 @@ namespace Microsoft.AspNet.Mvc.Rendering
|
|||
var compositeViewEngine = new CompositeViewEngine(provider.Object);
|
||||
|
||||
// Act
|
||||
var result = compositeViewEngine.FindPartialView(new Dictionary<string, object>(), viewName);
|
||||
var result = compositeViewEngine.FindPartialView(GetActionContext(), viewName);
|
||||
|
||||
// Assert
|
||||
Assert.True(result.Success);
|
||||
|
|
@ -230,11 +234,11 @@ namespace Microsoft.AspNet.Mvc.Rendering
|
|||
var engine1 = new Mock<IViewEngine>();
|
||||
var engine2 = new Mock<IViewEngine>();
|
||||
var engine3 = new Mock<IViewEngine>();
|
||||
engine1.Setup(e => e.FindPartialView(It.IsAny<IDictionary<string, object>>(), It.IsAny<string>()))
|
||||
engine1.Setup(e => e.FindPartialView(It.IsAny<ActionContext>(), It.IsAny<string>()))
|
||||
.Returns(ViewEngineResult.NotFound(viewName, new[] { "1", "2" }));
|
||||
engine2.Setup(e => e.FindPartialView(It.IsAny<IDictionary<string, object>>(), It.IsAny<string>()))
|
||||
engine2.Setup(e => e.FindPartialView(It.IsAny<ActionContext>(), It.IsAny<string>()))
|
||||
.Returns(ViewEngineResult.NotFound(viewName, new[] { "3" }));
|
||||
engine3.Setup(e => e.FindPartialView(It.IsAny<IDictionary<string, object>>(), It.IsAny<string>()))
|
||||
engine3.Setup(e => e.FindPartialView(It.IsAny<ActionContext>(), It.IsAny<string>()))
|
||||
.Returns(ViewEngineResult.NotFound(viewName, new[] { "4", "5" }));
|
||||
|
||||
var provider = new Mock<IViewEngineProvider>();
|
||||
|
|
@ -243,11 +247,17 @@ namespace Microsoft.AspNet.Mvc.Rendering
|
|||
var compositeViewEngine = new CompositeViewEngine(provider.Object);
|
||||
|
||||
// Act
|
||||
var result = compositeViewEngine.FindPartialView(new Dictionary<string, object>(), viewName);
|
||||
var result = compositeViewEngine.FindPartialView(GetActionContext(), viewName);
|
||||
|
||||
// Assert
|
||||
Assert.False(result.Success);
|
||||
Assert.Equal(new[] { "1", "2", "3", "4", "5" }, result.SearchedLocations);
|
||||
}
|
||||
|
||||
private static ActionContext GetActionContext()
|
||||
{
|
||||
var httpContext = Mock.Of<HttpContext>();
|
||||
return new ActionContext(httpContext, new RouteData(), new ActionDescriptor());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -86,7 +86,7 @@ namespace Microsoft.AspNet.Mvc.Core
|
|||
";
|
||||
var model = new DefaultTemplatesUtilities.ObjectWithScaffoldColumn();
|
||||
var viewEngine = new Mock<ICompositeViewEngine>();
|
||||
viewEngine.Setup(v => v.FindPartialView(It.IsAny<IDictionary<string, object>>(), It.IsAny<string>()))
|
||||
viewEngine.Setup(v => v.FindPartialView(It.IsAny<ActionContext>(), It.IsAny<string>()))
|
||||
.Returns(ViewEngineResult.NotFound("", Enumerable.Empty<string>()));
|
||||
var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(model, viewEngine.Object);
|
||||
|
||||
|
|
@ -104,7 +104,7 @@ namespace Microsoft.AspNet.Mvc.Core
|
|||
var model = new DefaultTemplatesUtilities.ObjectTemplateModel { Property1 = "Model string" };
|
||||
var viewEngine = new Mock<ICompositeViewEngine>();
|
||||
viewEngine
|
||||
.Setup(v => v.FindPartialView(It.IsAny<IDictionary<string, object>>(), It.IsAny<string>()))
|
||||
.Setup(v => v.FindPartialView(It.IsAny<ActionContext>(), It.IsAny<string>()))
|
||||
.Returns(ViewEngineResult.NotFound("", Enumerable.Empty<string>()));
|
||||
var helper = DefaultTemplatesUtilities.GetHtmlHelper(model, viewEngine.Object);
|
||||
helper.ViewData["Property1"] = "ViewData string";
|
||||
|
|
@ -123,7 +123,7 @@ namespace Microsoft.AspNet.Mvc.Core
|
|||
var model = new DefaultTemplatesUtilities.ObjectTemplateModel { Property1 = "Model string" };
|
||||
var viewEngine = new Mock<ICompositeViewEngine>();
|
||||
viewEngine
|
||||
.Setup(v => v.FindPartialView(It.IsAny<IDictionary<string, object>>(), It.IsAny<string>()))
|
||||
.Setup(v => v.FindPartialView(It.IsAny<ActionContext>(), It.IsAny<string>()))
|
||||
.Returns(ViewEngineResult.NotFound("", Enumerable.Empty<string>()));
|
||||
var helper = DefaultTemplatesUtilities.GetHtmlHelper(model, viewEngine.Object);
|
||||
helper.ViewData["Property1"] = "ViewData string";
|
||||
|
|
@ -142,7 +142,7 @@ namespace Microsoft.AspNet.Mvc.Core
|
|||
var model = new DefaultTemplatesUtilities.ObjectTemplateModel { Property1 = "Model string" };
|
||||
var viewEngine = new Mock<ICompositeViewEngine>();
|
||||
viewEngine
|
||||
.Setup(v => v.FindPartialView(It.IsAny<IDictionary<string, object>>(), It.IsAny<string>()))
|
||||
.Setup(v => v.FindPartialView(It.IsAny<ActionContext>(), It.IsAny<string>()))
|
||||
.Returns(ViewEngineResult.NotFound("", Enumerable.Empty<string>()));
|
||||
var helper = DefaultTemplatesUtilities.GetHtmlHelper(model, viewEngine.Object);
|
||||
|
||||
|
|
@ -162,7 +162,7 @@ namespace Microsoft.AspNet.Mvc.Core
|
|||
var model = new DefaultTemplatesUtilities.ObjectTemplateModel { Property1 = propertyValue, };
|
||||
var viewEngine = new Mock<ICompositeViewEngine>();
|
||||
viewEngine
|
||||
.Setup(v => v.FindPartialView(It.IsAny<IDictionary<string, object>>(), It.IsAny<string>()))
|
||||
.Setup(v => v.FindPartialView(It.IsAny<ActionContext>(), It.IsAny<string>()))
|
||||
.Returns(ViewEngineResult.NotFound("", Enumerable.Empty<string>()));
|
||||
var helper = DefaultTemplatesUtilities.GetHtmlHelper(model, viewEngine.Object);
|
||||
helper.ViewData["Property1"] = "ViewData string";
|
||||
|
|
|
|||
|
|
@ -94,7 +94,7 @@ Environment.NewLine;
|
|||
|
||||
var model = new DefaultTemplatesUtilities.ObjectWithScaffoldColumn();
|
||||
var viewEngine = new Mock<ICompositeViewEngine>();
|
||||
viewEngine.Setup(v => v.FindPartialView(It.IsAny<IDictionary<string, object>>(), It.IsAny<string>()))
|
||||
viewEngine.Setup(v => v.FindPartialView(It.IsAny<ActionContext>(), It.IsAny<string>()))
|
||||
.Returns(ViewEngineResult.NotFound("", Enumerable.Empty<string>()));
|
||||
var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(model, viewEngine.Object);
|
||||
|
||||
|
|
@ -112,7 +112,7 @@ Environment.NewLine;
|
|||
var model = new DefaultTemplatesUtilities.ObjectTemplateModel { Property1 = "Model string" };
|
||||
var viewEngine = new Mock<ICompositeViewEngine>();
|
||||
viewEngine
|
||||
.Setup(v => v.FindPartialView(It.IsAny<IDictionary<string, object>>(), It.IsAny<string>()))
|
||||
.Setup(v => v.FindPartialView(It.IsAny<ActionContext>(), It.IsAny<string>()))
|
||||
.Returns(ViewEngineResult.NotFound("", Enumerable.Empty<string>()));
|
||||
var helper = DefaultTemplatesUtilities.GetHtmlHelper(model, viewEngine.Object);
|
||||
helper.ViewData["Property1"] = "ViewData string";
|
||||
|
|
@ -133,7 +133,7 @@ Environment.NewLine;
|
|||
var model = new DefaultTemplatesUtilities.ObjectTemplateModel { Property1 = "Model string" };
|
||||
var viewEngine = new Mock<ICompositeViewEngine>();
|
||||
viewEngine
|
||||
.Setup(v => v.FindPartialView(It.IsAny<IDictionary<string, object>>(), It.IsAny<string>()))
|
||||
.Setup(v => v.FindPartialView(It.IsAny<ActionContext>(), It.IsAny<string>()))
|
||||
.Returns(ViewEngineResult.NotFound("", Enumerable.Empty<string>()));
|
||||
var helper = DefaultTemplatesUtilities.GetHtmlHelper(model, viewEngine.Object);
|
||||
helper.ViewData["Property1"] = "ViewData string";
|
||||
|
|
@ -154,7 +154,7 @@ Environment.NewLine;
|
|||
var model = new DefaultTemplatesUtilities.ObjectTemplateModel { Property1 = "Model string" };
|
||||
var viewEngine = new Mock<ICompositeViewEngine>();
|
||||
viewEngine
|
||||
.Setup(v => v.FindPartialView(It.IsAny<IDictionary<string, object>>(), It.IsAny<string>()))
|
||||
.Setup(v => v.FindPartialView(It.IsAny<ActionContext>(), It.IsAny<string>()))
|
||||
.Returns(ViewEngineResult.NotFound("", Enumerable.Empty<string>()));
|
||||
var helper = DefaultTemplatesUtilities.GetHtmlHelper(model, viewEngine.Object);
|
||||
|
||||
|
|
@ -176,7 +176,7 @@ Environment.NewLine;
|
|||
var model = new DefaultTemplatesUtilities.ObjectTemplateModel { Property1 = propertyValue, };
|
||||
var viewEngine = new Mock<ICompositeViewEngine>();
|
||||
viewEngine
|
||||
.Setup(v => v.FindPartialView(It.IsAny<IDictionary<string, object>>(), It.IsAny<string>()))
|
||||
.Setup(v => v.FindPartialView(It.IsAny<ActionContext>(), It.IsAny<string>()))
|
||||
.Returns(ViewEngineResult.NotFound("", Enumerable.Empty<string>()));
|
||||
var helper = DefaultTemplatesUtilities.GetHtmlHelper(model, viewEngine.Object);
|
||||
helper.ViewData["Property1"] = "ViewData string";
|
||||
|
|
|
|||
|
|
@ -151,7 +151,7 @@ namespace Microsoft.AspNet.Mvc.Core
|
|||
|
||||
var viewEngine = new Mock<ICompositeViewEngine>();
|
||||
viewEngine
|
||||
.Setup(v => v.FindPartialView(It.IsAny<Dictionary<string, object>>(), It.IsAny<string>()))
|
||||
.Setup(v => v.FindPartialView(It.IsAny<ActionContext>(), It.IsAny<string>()))
|
||||
.Returns(ViewEngineResult.Found("MyView", view.Object));
|
||||
|
||||
return viewEngine.Object;
|
||||
|
|
|
|||
|
|
@ -51,12 +51,12 @@ namespace Microsoft.AspNet.Mvc.Rendering
|
|||
|
||||
public ITestService Service { get; private set; }
|
||||
|
||||
public ViewEngineResult FindPartialView([NotNull]IDictionary<string, object> context, [NotNull]string partialViewName)
|
||||
public ViewEngineResult FindPartialView(ActionContext context, string partialViewName)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public ViewEngineResult FindView([NotNull]IDictionary<string, object> context, [NotNull]string viewName)
|
||||
public ViewEngineResult FindView(ActionContext context, string viewName)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -53,12 +53,12 @@ namespace Microsoft.AspNet.Mvc.Rendering
|
|||
|
||||
private class TestViewEngine : IViewEngine
|
||||
{
|
||||
public ViewEngineResult FindPartialView(IDictionary<string, object> context, string partialViewName)
|
||||
public ViewEngineResult FindPartialView(ActionContext context, string partialViewName)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public ViewEngineResult FindView(IDictionary<string, object> context, string viewName)
|
||||
public ViewEngineResult FindView(ActionContext context, string viewName)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,8 +35,6 @@ namespace Microsoft.AspNet.Mvc.Core.Test
|
|||
var routeDictionary = new Dictionary<string, object>();
|
||||
|
||||
var viewEngine = new Mock<ICompositeViewEngine>();
|
||||
viewEngine.Setup(v => v.FindView(routeDictionary, It.IsAny<string>()))
|
||||
.Returns(ViewEngineResult.Found("MyView", view.Object));
|
||||
|
||||
var serviceProvider = new Mock<IServiceProvider>();
|
||||
serviceProvider.Setup(sp => sp.GetService(typeof(ICompositeViewEngine)))
|
||||
|
|
@ -52,12 +50,15 @@ namespace Microsoft.AspNet.Mvc.Core.Test
|
|||
.Returns(response.Object);
|
||||
context.SetupGet(c => c.RequestServices)
|
||||
.Returns(serviceProvider.Object);
|
||||
|
||||
|
||||
var actionContext = new ActionContext(context.Object,
|
||||
new RouteData() { Values = routeDictionary },
|
||||
new RouteData() { Values = routeDictionary },
|
||||
new ActionDescriptor());
|
||||
|
||||
|
||||
|
||||
viewEngine.Setup(v => v.FindView(actionContext, It.IsAny<string>()))
|
||||
.Returns(ViewEngineResult.Found("MyView", view.Object));
|
||||
|
||||
|
||||
var viewResult = new ViewResult();
|
||||
|
||||
// Act
|
||||
|
|
@ -84,8 +85,6 @@ namespace Microsoft.AspNet.Mvc.Core.Test
|
|||
var routeDictionary = new Dictionary<string, object>();
|
||||
|
||||
var goodViewEngine = new Mock<IViewEngine>();
|
||||
goodViewEngine.Setup(v => v.FindView(routeDictionary, It.IsAny<string>()))
|
||||
.Returns(ViewEngineResult.Found("MyView", view.Object));
|
||||
|
||||
var badViewEngine = new Mock<ICompositeViewEngine>(MockBehavior.Strict);
|
||||
|
||||
|
|
@ -108,6 +107,10 @@ namespace Microsoft.AspNet.Mvc.Core.Test
|
|||
new RouteData() { Values = routeDictionary },
|
||||
new ActionDescriptor());
|
||||
|
||||
goodViewEngine.Setup(v => v.FindView(actionContext, It.IsAny<string>()))
|
||||
.Returns(ViewEngineResult.Found("MyView", view.Object));
|
||||
|
||||
|
||||
var viewResult = new ViewResult()
|
||||
{
|
||||
ViewEngine = goodViewEngine.Object,
|
||||
|
|
@ -141,7 +144,7 @@ namespace Microsoft.AspNet.Mvc.Core.Test
|
|||
});
|
||||
|
||||
var viewEngine = new Mock<ICompositeViewEngine>();
|
||||
viewEngine.Setup(v => v.FindView(routeDictionary, It.IsAny<string>()))
|
||||
viewEngine.Setup(v => v.FindView(It.IsAny<ActionContext>(), It.IsAny<string>()))
|
||||
.Returns(ViewEngineResult.Found("MyView", view.Object));
|
||||
|
||||
var serviceProvider = new Mock<IServiceProvider>();
|
||||
|
|
@ -156,11 +159,11 @@ namespace Microsoft.AspNet.Mvc.Core.Test
|
|||
context.SetupGet(c => c.Response)
|
||||
.Returns(response.Object);
|
||||
context.SetupGet(c => c.RequestServices).Returns(serviceProvider.Object);
|
||||
|
||||
|
||||
var actionContext = new ActionContext(context.Object,
|
||||
new RouteData() { Values = routeDictionary },
|
||||
new ActionDescriptor());
|
||||
|
||||
|
||||
var viewResult = new ViewResult();
|
||||
|
||||
// Act
|
||||
|
|
|
|||
|
|
@ -3,7 +3,9 @@
|
|||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.AspNet.Http;
|
||||
using Microsoft.AspNet.Mvc.Rendering;
|
||||
using Microsoft.AspNet.Routing;
|
||||
using Moq;
|
||||
using Xunit;
|
||||
|
||||
|
|
@ -39,10 +41,11 @@ namespace Microsoft.AspNet.Mvc.Razor.Test
|
|||
{
|
||||
// Arrange
|
||||
var viewEngine = CreateSearchLocationViewEngineTester();
|
||||
var context = GetActionContext(_controllerTestContext);
|
||||
|
||||
// Act & Assert
|
||||
Assert.Throws<InvalidOperationException>(() =>
|
||||
viewEngine.FindView(_controllerTestContext, viewName));
|
||||
viewEngine.FindView(context, viewName));
|
||||
}
|
||||
|
||||
[Theory]
|
||||
|
|
@ -53,10 +56,11 @@ namespace Microsoft.AspNet.Mvc.Razor.Test
|
|||
var viewEngine = CreateSearchLocationViewEngineTester();
|
||||
// Append .cshtml so the viewname is no longer invalid
|
||||
viewName += ".cshtml";
|
||||
var context = GetActionContext(_controllerTestContext);
|
||||
|
||||
// Act & Assert
|
||||
// If this throws then our test case fails
|
||||
var result = viewEngine.FindPartialView(_controllerTestContext, viewName);
|
||||
var result = viewEngine.FindPartialView(context, viewName);
|
||||
|
||||
Assert.False(result.Success);
|
||||
}
|
||||
|
|
@ -67,10 +71,11 @@ namespace Microsoft.AspNet.Mvc.Razor.Test
|
|||
{
|
||||
// Arrange
|
||||
var viewEngine = CreateSearchLocationViewEngineTester();
|
||||
var context = GetActionContext(_controllerTestContext);
|
||||
|
||||
// Act & Assert
|
||||
Assert.Throws<InvalidOperationException>(() =>
|
||||
viewEngine.FindPartialView(_controllerTestContext, partialViewName));
|
||||
viewEngine.FindPartialView(context, partialViewName));
|
||||
}
|
||||
|
||||
[Theory]
|
||||
|
|
@ -81,10 +86,11 @@ namespace Microsoft.AspNet.Mvc.Razor.Test
|
|||
var viewEngine = CreateSearchLocationViewEngineTester();
|
||||
// Append .cshtml so the viewname is no longer invalid
|
||||
partialViewName += ".cshtml";
|
||||
var context = GetActionContext(_controllerTestContext);
|
||||
|
||||
// Act & Assert
|
||||
// If this throws then our test case fails
|
||||
var result = viewEngine.FindPartialView(_controllerTestContext, partialViewName);
|
||||
var result = viewEngine.FindPartialView(context, partialViewName);
|
||||
|
||||
Assert.False(result.Success);
|
||||
}
|
||||
|
|
@ -95,15 +101,16 @@ namespace Microsoft.AspNet.Mvc.Razor.Test
|
|||
// Arrange
|
||||
var searchedLocations = new List<string>();
|
||||
var viewEngine = CreateSearchLocationViewEngineTester();
|
||||
var context = GetActionContext(_areaTestContext);
|
||||
|
||||
// Act
|
||||
var result = viewEngine.FindPartialView(_areaTestContext, "partial");
|
||||
var result = viewEngine.FindPartialView(context, "partial");
|
||||
|
||||
// Assert
|
||||
Assert.False(result.Success);
|
||||
Assert.Equal(new[] {
|
||||
"/Areas/foo/Views/bar/partial.cshtml",
|
||||
"/Areas/foo/Views/Shared/partial.cshtml",
|
||||
Assert.Equal(new[] {
|
||||
"/Areas/foo/Views/bar/partial.cshtml",
|
||||
"/Areas/foo/Views/Shared/partial.cshtml",
|
||||
"/Views/Shared/partial.cshtml",
|
||||
}, result.SearchedLocations);
|
||||
}
|
||||
|
|
@ -113,14 +120,15 @@ namespace Microsoft.AspNet.Mvc.Razor.Test
|
|||
{
|
||||
// Arrange
|
||||
var viewEngine = CreateSearchLocationViewEngineTester();
|
||||
var context = GetActionContext(_controllerTestContext);
|
||||
|
||||
// Act
|
||||
var result = viewEngine.FindPartialView(_controllerTestContext, "partialNoArea");
|
||||
var result = viewEngine.FindPartialView(context, "partialNoArea");
|
||||
|
||||
// Assert
|
||||
Assert.False(result.Success);
|
||||
Assert.Equal(new[] {
|
||||
"/Views/bar/partialNoArea.cshtml",
|
||||
Assert.Equal(new[] {
|
||||
"/Views/bar/partialNoArea.cshtml",
|
||||
"/Views/Shared/partialNoArea.cshtml",
|
||||
}, result.SearchedLocations);
|
||||
}
|
||||
|
|
@ -130,15 +138,16 @@ namespace Microsoft.AspNet.Mvc.Razor.Test
|
|||
{
|
||||
// Arrange
|
||||
var viewEngine = CreateSearchLocationViewEngineTester();
|
||||
var context = GetActionContext(_areaTestContext);
|
||||
|
||||
// Act
|
||||
var result = viewEngine.FindView(_areaTestContext, "full");
|
||||
var result = viewEngine.FindView(context, "full");
|
||||
|
||||
// Assert
|
||||
Assert.False(result.Success);
|
||||
Assert.Equal(new[] {
|
||||
"/Areas/foo/Views/bar/full.cshtml",
|
||||
"/Areas/foo/Views/Shared/full.cshtml",
|
||||
Assert.Equal(new[] {
|
||||
"/Areas/foo/Views/bar/full.cshtml",
|
||||
"/Areas/foo/Views/Shared/full.cshtml",
|
||||
"/Views/Shared/full.cshtml",
|
||||
}, result.SearchedLocations);
|
||||
}
|
||||
|
|
@ -148,14 +157,15 @@ namespace Microsoft.AspNet.Mvc.Razor.Test
|
|||
{
|
||||
// Arrange
|
||||
var viewEngine = CreateSearchLocationViewEngineTester();
|
||||
var context = GetActionContext(_controllerTestContext);
|
||||
|
||||
// Act
|
||||
var result = viewEngine.FindView(_controllerTestContext, "fullNoArea");
|
||||
var result = viewEngine.FindView(context, "fullNoArea");
|
||||
|
||||
// Assert
|
||||
Assert.False(result.Success);
|
||||
Assert.Equal(new[] {
|
||||
"/Views/bar/fullNoArea.cshtml",
|
||||
Assert.Equal(new[] {
|
||||
"/Views/bar/fullNoArea.cshtml",
|
||||
"/Views/Shared/fullNoArea.cshtml",
|
||||
}, result.SearchedLocations);
|
||||
}
|
||||
|
|
@ -170,9 +180,10 @@ namespace Microsoft.AspNet.Mvc.Razor.Test
|
|||
var viewEngine = new RazorViewEngine(pageFactory.Object,
|
||||
Mock.Of<IRazorPageActivator>(),
|
||||
Mock.Of<IViewStartProvider>());
|
||||
var context = GetActionContext(_controllerTestContext);
|
||||
|
||||
// Act
|
||||
var result = viewEngine.FindView(_controllerTestContext, "test-view");
|
||||
var result = viewEngine.FindView(context, "test-view");
|
||||
|
||||
// Assert
|
||||
Assert.True(result.Success);
|
||||
|
|
@ -192,5 +203,12 @@ namespace Microsoft.AspNet.Mvc.Razor.Test
|
|||
|
||||
return viewEngine;
|
||||
}
|
||||
|
||||
private static ActionContext GetActionContext(IDictionary<string, object> routeValues)
|
||||
{
|
||||
var httpContext = Mock.Of<HttpContext>();
|
||||
var routeData = new RouteData { Values = routeValues };
|
||||
return new ActionContext(httpContext, routeData, new ActionDescriptor());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,14 +2,14 @@
|
|||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.AspNet.Mvc;
|
||||
using Microsoft.AspNet.Mvc.Rendering;
|
||||
|
||||
namespace CompositeViewEngine
|
||||
{
|
||||
public class TestViewEngine : IViewEngine
|
||||
{
|
||||
public ViewEngineResult FindPartialView(IDictionary<string, object> context, string partialViewName)
|
||||
public ViewEngineResult FindPartialView(ActionContext context, string partialViewName)
|
||||
{
|
||||
if (string.Equals(partialViewName, "partial-test-view", StringComparison.Ordinal))
|
||||
{
|
||||
|
|
@ -18,7 +18,7 @@ namespace CompositeViewEngine
|
|||
return ViewEngineResult.NotFound(partialViewName, new[] { partialViewName });
|
||||
}
|
||||
|
||||
public ViewEngineResult FindView(IDictionary<string, object> context, string viewName)
|
||||
public ViewEngineResult FindView(ActionContext context, string viewName)
|
||||
{
|
||||
if (string.Equals(viewName, "test-view"))
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue