File: ModelBinding\ModelNames.cs
Web Access
Project: src\src\Mvc\Mvc.Core\src\Microsoft.AspNetCore.Mvc.Core.csproj (Microsoft.AspNetCore.Mvc.Core)
// 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 System.Globalization;
 
namespace Microsoft.AspNetCore.Mvc.ModelBinding;
 
/// <summary>
/// Static class for helpers dealing with model names.
/// </summary>
public static class ModelNames
{
    /// <summary>
    /// Create an index model name from the parent name.
    /// </summary>
    /// <param name="parentName">The parent name.</param>
    /// <param name="index">The index.</param>
    /// <returns>The index model name.</returns>
    public static string CreateIndexModelName(string parentName, int index)
    {
        return CreateIndexModelName(parentName, index.ToString(CultureInfo.InvariantCulture));
    }
 
    /// <summary>
    /// Create an index model name from the parent name.
    /// </summary>
    /// <param name="parentName">The parent name.</param>
    /// <param name="index">The index.</param>
    /// <returns>The index model name.</returns>
    public static string CreateIndexModelName(string parentName, string index)
    {
        return (parentName.Length == 0) ? "[" + index + "]" : parentName + "[" + index + "]";
    }
 
    /// <summary>
    /// Create a property model name with a prefix.
    /// </summary>
    /// <param name="prefix">The prefix to use.</param>
    /// <param name="propertyName">The property name.</param>
    /// <returns>The property model name.</returns>
    public static string CreatePropertyModelName(string? prefix, string? propertyName)
    {
        if (string.IsNullOrEmpty(prefix))
        {
            return propertyName ?? string.Empty;
        }
 
        if (string.IsNullOrEmpty(propertyName))
        {
            return prefix ?? string.Empty;
        }
 
        if (propertyName.StartsWith('['))
        {
            // The propertyName might represent an indexer access, in which case combining
            // with a 'dot' would be invalid. This case occurs only when called from ValidationVisitor.
            return prefix + propertyName;
        }
 
        return prefix + "." + propertyName;
    }
}