В ASP.NET MVC, как я отображаю имя свойства как разделение маркировки на CamelCase

Я знаю, что видел это прежде. Я не могу помнить, была ли это демонстрация шаблона C4MVC или входной разработчик вещь! Я должен знать, как я могу использовать конвенцию CamelCasing, мои свойства модели представления и рендеринг "CamelCasedProperty" в маркировке как "Camel Заключили Свойство в корпус". Это должно быть обработано создаванием нового мастера представления вместо того, чтобы программно обработать это.

11
задан Andrew Siemer 27 April 2010 в 00:19
поделиться

2 ответа

После некоторой проработки я вроде как нашел зацепку к тому, что мне было интересно сделать. Посмотрел это видео C4MVC. Я уверен, что это уже может быть реализовано в MVC Contrib в виде конструктора ввода. Однако мне очень интересно разобраться во всех тонкостях, так сказать, чтобы узнать все, что смогу, для моей предстоящей книги "ASP.NET MVC Cookbook" (бессовестная реклама для публичного обзора). Вот решение, которое я придумал и которое требует только переименования Html.LabelFor в Html.LabelFor2 в сгенерированном коде формы "create new view":

Я создал метод для получения имени свойства из переданной лямбды. Затем я создал другой метод для разбора имени свойства на заглавные буквы, содержащиеся в имени.

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);
        }
    }
}
7
ответ дан 3 December 2019 в 03:04
поделиться

Я не думаю, что то, что вы хотите, возможно в обычном 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) %>

Если вы видели демонстрацию того, как это делается другим способом, это могло быть из проекта MvcContrib для InputBuilders .

Вот прямая ссылка на часть проекта, я думаю, вы имеете в виду:

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

Текст, выделенный красным, - это метки, принадлежащие типу Model. Метка создается из объекта PropertyInfo, который представляет соответствующие свойства режима.

Ярлык - Имя свойства.

Метка - это Имя свойства, разделенное на имя свойства паскальского регистра.

Метка указывается с помощью атрибута метки, примененного к свойству.

20
ответ дан 3 December 2019 в 03:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: