diff --git a/src/Microsoft.AspNetCore.Mvc.ViewFeatures/Controller.cs b/src/Microsoft.AspNetCore.Mvc.ViewFeatures/Controller.cs index e6d03bf606..92017c07ec 100644 --- a/src/Microsoft.AspNetCore.Mvc.ViewFeatures/Controller.cs +++ b/src/Microsoft.AspNetCore.Mvc.ViewFeatures/Controller.cs @@ -138,7 +138,6 @@ namespace Microsoft.AspNetCore.Mvc [NonAction] public virtual ViewResult View(string viewName, object model) { - // Do not override ViewData.Model unless passed a non-null value. if (model != null) { ViewData.Model = model; @@ -195,7 +194,6 @@ namespace Microsoft.AspNetCore.Mvc [NonAction] public virtual PartialViewResult PartialView(string viewName, object model) { - // Do not override ViewData.Model unless passed a non-null value. if (model != null) { ViewData.Model = model; diff --git a/src/Microsoft.AspNetCore.Mvc.ViewFeatures/ViewComponent.cs b/src/Microsoft.AspNetCore.Mvc.ViewFeatures/ViewComponent.cs index b287c4fba3..0084aa222a 100644 --- a/src/Microsoft.AspNetCore.Mvc.ViewFeatures/ViewComponent.cs +++ b/src/Microsoft.AspNetCore.Mvc.ViewFeatures/ViewComponent.cs @@ -262,7 +262,12 @@ namespace Microsoft.AspNetCore.Mvc /// A . public ViewViewComponentResult View(string viewName, TModel model) { - var viewData = new ViewDataDictionary(ViewData, model); + if (model != null) + { + ViewData.Model = model; + } + + var viewData = new ViewDataDictionary(ViewData); return new ViewViewComponentResult { ViewEngine = ViewEngine, diff --git a/test/Microsoft.AspNetCore.Mvc.ViewFeatures.Test/ViewComponentTests.cs b/test/Microsoft.AspNetCore.Mvc.ViewFeatures.Test/ViewComponentTests.cs index 36caea39e9..92aaafbabb 100644 --- a/test/Microsoft.AspNetCore.Mvc.ViewFeatures.Test/ViewComponentTests.cs +++ b/test/Microsoft.AspNetCore.Mvc.ViewFeatures.Test/ViewComponentTests.cs @@ -82,6 +82,25 @@ namespace Microsoft.AspNetCore.Mvc Assert.Null(actualResult.ViewName); } + [Fact] + public void ViewComponent_View_WithEmptyParameter_SetsViewDataModelWithDefaultViewName() + { + // Arrange + var viewComponent = new TestViewComponent(); + var model = new object(); + viewComponent.ViewData.Model = model; + + // Act + var actualResult = viewComponent.View(); + + // Assert + Assert.IsType(actualResult); + Assert.NotSame(viewComponent.ViewData, actualResult.ViewData); + Assert.Equal(new ViewDataDictionary(viewComponent.ViewData), actualResult.ViewData); + Assert.Same(model, actualResult.ViewData.Model); + Assert.Null(actualResult.ViewName); + } + [Fact] public void ViewComponent_View_WithViewNameParameter_SetsResultViewWithCustomViewName() {