| File: ViewDataDictionaryOfT.cs | Web Access |
| Project: src\aspnetcore\src\Mvc\Mvc.ViewFeatures\src\Microsoft.AspNetCore.Mvc.ViewFeatures.csproj (Microsoft.AspNetCore.Mvc.ViewFeatures) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. #nullable enable using Microsoft.AspNetCore.Mvc.ModelBinding; namespace Microsoft.AspNetCore.Mvc.ViewFeatures; /// <summary> /// Represents a <see cref="ViewDataDictionary"/> for a specific model type. /// </summary> /// <typeparam name="TModel">The type of the model.</typeparam> public class ViewDataDictionary<TModel> : ViewDataDictionary { /// <summary> /// Initializes a new instance of the <see cref="ViewDataDictionary{TModel}"/> class. /// </summary> /// <remarks> /// For use when creating a <see cref="ViewDataDictionary{TModel}"/> for a new top-level scope. /// </remarks> /// <inheritdoc /> // References may not show up due to Type.GetConstructor() use in RazorPageActivator. public ViewDataDictionary( IModelMetadataProvider metadataProvider, ModelStateDictionary modelState) : base(metadataProvider, modelState, declaredModelType: typeof(TModel)) { } /// <summary> /// Initializes a new instance of the <see cref="ViewDataDictionary{TModel}"/> class based in part on an /// existing <see cref="ViewDataDictionary"/> instance. /// </summary> /// <remarks> /// <para> /// For use when copying a <see cref="ViewDataDictionary"/> instance and <typeparamref name="TModel"/> is known /// but <see cref="Model"/> should be copied from the existing instance e.g. when copying from a base /// <see cref="ViewDataDictionary"/> instance to a <see cref="ViewDataDictionary{TModel}"/> instance. /// </para> /// <para> /// This constructor may <c>throw</c> if <c>source.Model</c> is non-<c>null</c> and incompatible with /// <typeparamref name="TModel"/>. Pass <c>model: null</c> to /// <see cref="ViewDataDictionary{TModel}(ViewDataDictionary, object)"/> to ignore <c>source.Model</c>. /// </para> /// </remarks> /// <inheritdoc /> // References may not show up due to Type.GetConstructor() use in RazorPageActivator. public ViewDataDictionary(ViewDataDictionary source) : base(source, declaredModelType: typeof(TModel)) { } /// <summary> /// Initializes a new instance of the <see cref="ViewDataDictionary{TModel}"/> class based in part on an /// existing <see cref="ViewDataDictionary"/> instance. This constructor is careful to avoid exceptions /// <see cref="ViewDataDictionary.SetModel"/> may throw when <paramref name="model"/> is <c>null</c>. /// </summary> /// <remarks> /// <para> /// For use when copying a <see cref="ViewDataDictionary"/> instance and <typeparamref name="TModel"/> and /// <see cref="Model"/> are known. /// </para> /// <para> /// This constructor may <c>throw</c> if <paramref name="model"/> is non-<c>null</c> and incompatible with /// <typeparamref name="TModel"/>. /// </para> /// </remarks> /// <inheritdoc /> // Model parameter type is object to allow "model: null" calls even when TModel is a value type. A TModel // parameter would likely require IEquatable<TModel> type restrictions to pass expected null value to the base // constructor. public ViewDataDictionary(ViewDataDictionary source, object? model) : base(source, model, declaredModelType: typeof(TModel)) { } /// <summary> /// Initializes a new instance of the <see cref="ViewDataDictionary{TModel}"/> class. /// </summary> /// <remarks>Internal for testing.</remarks> /// <inheritdoc /> internal ViewDataDictionary(IModelMetadataProvider metadataProvider) : base(metadataProvider, declaredModelType: typeof(TModel)) { } /// <inheritdoc /> public new TModel Model { get => (base.Model is null) ? default! : (TModel)base.Model; set => base.Model = value; } }