Asp.net-Mvc-2

在 ASP.NET MVC 中,如何在 CamelCase 上將屬性名稱顯示為標籤拆分

  • July 21, 2017

我知道我以前見過這個。我不記得它是 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項目

這是我認為您所指的項目部分的直接連結:

http://www.lostechies.com/blogs/hex/archive/2009/06/09/opinionated-input-builders-for-asp-net-mvc-part-2-html-layout-for-the-label.aspx

以紅色突出顯示的文本是來自模型類型的標籤。標籤是從表示模式的相應屬性的 PropertyInfo 對象創建的。

標籤是屬性名稱。

標籤是按帕斯卡大小寫屬性名稱拆分的屬性名稱。

標籤是通過使用應用於屬性的標籤屬性來指定的。

引用自:https://stackoverflow.com/questions/2717910