Могу ли я сказать MVC автоматически разделять свойства в паскалях в словах?

У меня часто есть код C#, как

    [DisplayName("Number of Questions")]
    public int NumberOfQuestions { get; set; }

Где я использую DisplayName свойство добавлять в пробелы, когда оно отображается. Есть ли возможность указать MVC добавить пробелы по умолчанию, если DisplayName аннотация не предоставлена ​​явно?

Спасибо

2 ответа

Есть два способа.

1. Переопределите LabelFor и создайте пользовательский помощник HTML:

  • Класс утилит для пользовательского помощника HTML:

    public class CustomHTMLHelperUtilities
    {
    // Method to Get the Property Name
    internal static string PropertyName<T, TResult>(Expression<Func<T, TResult>> expression)
     {
        switch (expression.Body.NodeType)
        {
            case ExpressionType.MemberAccess:
                var memberExpression = expression.Body as MemberExpression;
                return memberExpression.Member.Name;
            default:
                return string.Empty;
        }
     }
     // Method to split the camel case
     internal static string SplitCamelCase(string camelCaseString)
     {
        string output = System.Text.RegularExpressions.Regex.Replace(
            camelCaseString,
            "([A-Z])",
            " $1",
            RegexOptions.Compiled).Trim();
        return output;
     }
    }
    
  • Пользовательский Помощник:

    public static class LabelHelpers
    {
     public static MvcHtmlString LabelForCamelCase<T, TResult>(this HtmlHelper<T> helper, Expression<Func<T, TResult>> expression, object htmlAttributes = null)
      {
        string propertyName = CustomHTMLHelperUtilities.PropertyName(expression);
        string labelValue = CustomHTMLHelperUtilities.SplitCamelCase(propertyName);
    
        #region Html attributes creation
        var builder = new TagBuilder("label ");
        builder.Attributes.Add("text", labelValue);
        builder.Attributes.Add("for", propertyName);
        #endregion
    
        #region additional html attributes
        if (htmlAttributes != null)
        {
            var attributes = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);
            builder.MergeAttributes(attributes);
        }
        #endregion
    
        MvcHtmlString retHtml = new MvcHtmlString(builder.ToString(TagRenderMode.SelfClosing));
        return retHtml;
    
      }
    }
    
  • Используйте в CSHTML:

    @Html.LabelForCamelCase(m=>m.YourPropertyName, new { style="color:red"})
    

    Ваш ярлык будет отображаться как "Ваше имущество"

2. Использование файла ресурсов:

[Display(Name = "PropertyKeyAsperResourceFile", ResourceType = typeof(ResourceFileName))]
public string myProperty { get; set; }

Я предпочту первое решение. Потому что файл ресурсов предназначен для выполнения отдельной и зарезервированной роли в проекте. Кроме того, пользовательский помощник HTML может быть повторно использован после создания.

Humanizer — очень популярная библиотека, которую я использовал для этого.

https://github.com/Humanizr/Humanizer

      "PascalCaseInputStringIsTurnedIntoSentence".Humanize() => "Pascal case input string is turned into sentence"
Другие вопросы по тегам