Могу ли я сказать 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"