在 ASP.NET MVC 中,如何在 CamelCase 上將屬性名稱顯示為標籤拆分
我知道我以前見過這個。我不記得它是 C4MVC 模板展示還是輸入建構器!我需要知道如何使用 CamelCased 我的視圖模型屬性的約定,並將標籤中的“CamelCasedProperty”呈現為“CamelCased 屬性”。這應該由創建新視圖嚮導處理,而不是以程式方式處理。
經過一番摸索,我找到了我感興趣的事情的線索。觀看此C4MVC 影片。我確信這可能已經在 MVC Contrib 作為輸入建構器中完成了。但是,我非常有興趣了解所有的基礎知識,以便為我即將出版的書“ASP.NET MVC Cookbook”(公開評論的無恥外掛)學習我所能做的一切。這是我想出的解決方案,只需要我在“創建新視圖”的生成程式碼中將 Html.LabelFor 重命名為 Html.LabelFor2:
我創建了一個從傳入的 lambda 中獲取屬性名稱的方法。然後,我創建了另一種方法來解析名稱中包含的大寫字母的屬性名稱。
using System; using System.Linq.Expressions; using System.Text.RegularExpressions; namespace FuryPartners.WebClient.Helpers { public class HelperUtilities { 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 "oops"; } } internal static string SplitCamelCase(string camelCaseString) { string output = System.Text.RegularExpressions.Regex.Replace( camelCaseString, "([A-Z])", " $1", RegexOptions.Compiled).Trim(); return output; } } }然後我擴展了 HtmlHelper 以擁有一個 LabelFor2 方法,該方法建構並傳遞屬性名稱的適當顯示格式。
using System; using System.Linq.Expressions; using System.Web.Mvc; namespace FuryPartners.WebClient.Helpers { public static class LabelHelpers { public static MvcHtmlString LabelFor2<T, TResult>(this HtmlHelper<T> helper, Expression<Func<T, TResult>> expression) { string propertyName = HelperUtilities.PropertyName(expression); string labelValue = HelperUtilities.SplitCamelCase(propertyName); string label = String.Format("<label for=\"{0}\">{1}</label>", propertyName, labelValue); return MvcHtmlString.Create(label); } } }
我認為您想要的在 vanilla ASP.NET MVC 2 中是不可能的。
在 ASP.NET MVC 2 中,您需要使用帶有所需文本的 DisplayName 屬性來裝飾您的模型,然後自動生成的嚮導將用於
LabelFor輸出屬性的標籤。例如:class MyModel() { [DisplayName("Your Property Name")] public string YourPropertyName { get; set; } }然後在視圖中:
<%= Html.LabelFor(m => m.YourPropertyName) %>如果您看到它以其他方式完成的展示,它可能來自 InputBuilders 的 MvcContrib項目。
這是我認為您所指的項目部分的直接連結:
以紅色突出顯示的文本是來自模型類型的標籤。標籤是從表示模式的相應屬性的 PropertyInfo 對象創建的。
標籤是屬性名稱。
標籤是按帕斯卡大小寫屬性名稱拆分的屬性名稱。
標籤是通過使用應用於屬性的標籤屬性來指定的。