如何大写第一个字母剃须刀

时间:2012-10-03 16:33:45

标签: asp.net-mvc asp.net-mvc-3 razor capitalization

我是MVC的新手,并没有在网上找到解决方案。

我的html为:

@Html.DisplayFor(model => model.Address1) <br />

我希望地址1的所有首字母都是大写字母,例如Something Road而不是道路。

现在我有一个类客户端和属性Address1并使用EF来获取如下地址:

 public class MyDBContext : DbContext
    {
        public DbSet<Client> Clients { get; set; }
    }

希望它有意义。

9 个答案:

答案 0 :(得分:17)

简单的解决方案可能是

Html.EditorFor(model => model.FirstName, new { htmlAttributes = new { class = "form-control" } })

然后使用下面的css将你的第一个字母大写,然后你就完成了。

.form-control {
text-transform:capitalize;
}

答案 1 :(得分:6)

您可以为Client添加一个部分类,其属性在标题大小写中返回Address1

public partial class Client
{
    public string TitleCaseAddress1
    {
        get
        {
            return System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(this.Address1);
        }
    }
}

然后您将在剃刀中使用TitleCaseAddress1

@Html.DisplayFor(model => model.TitleCaseAddress1) <br />

参考:http://msdn.microsoft.com/en-us/library/system.globalization.textinfo.totitlecase(v=vs.100).aspx

答案 2 :(得分:5)

最好将表示层和数据访问层分开。创建一个包装或翻译ORM /实体框架对象的视图模型。

public class ClientViewModel
{
    private Client _dao;

    public ClientViewModel(Client dao)
    {
        _dao = dao;
    }

    public string Address 
    { 
        get
        {
            // modify the address as needed here
            return _dao.Address;
        }
    }
}

答案 3 :(得分:4)

对于任何想要在Razor中严格执行此操作的人 此示例正在转换登录的用户名。 替换为您的字符串变量。

这会获得第一个字母并转换为上限:

@(@ User.Identity.GetUserName()。ToString()。Substring(0,1).ToUpper())

这会剩余字符串。

@(@ User.Identity.GetUserName()。ToString()。Substring(1,User.Identity.GetUserName()。ToString()。Length - 1))

将它们放在一起就可以得到整个字符串。

@(@ User.Identity.GetUserName()。ToString()。Substring(0,1).ToUpper())@(@ User.Identity.GetUserName()。ToString()。Substring(1,User。 Identity.GetUserName()。ToString()。Length - 1))

答案 4 :(得分:3)

以下是正确的方式来实现您的目标,我已经为您实现了。

HtmlStringFormatter.Create()允许您传递委托并制作自己的匿名格式化程序。

代码示例:

// This just upper case all the letters.
@Html.DisplayFormatFor(model => model.Address, HtmlStringFormatter.Create(s=> s.ToUpper()))

如果您要创建自定义格式化程序,请从HtmlStringFormatter派生并将其委托属性设置为您要执行的操作。

代码示例:

// Here I use the Capital Letter custom formatter.
@Html.DisplayFormatFor(model => model.Address, new CapitalLetterFormatter())

所有课程:

namespace MvcPlay.HelperExtensions
{
    public static class HelperExtensions
    {
        public static MvcHtmlString DisplayFormatFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression, HtmlStringFormatter formatter)
        {
            var output = helper.DisplayFor(expression);
            string formatted = formatter.Delegate.Invoke(output.ToString());
            return MvcHtmlString.Create(formatted);
        }
    }
}

namespace MvcPlay.HtmlStringFormatting
{
    public class HtmlStringFormatter
    {
        public delegate string FormatDelegate(string s);

        public FormatDelegate Delegate;
        public Expression<FormatDelegate> formatExpression;

        private HtmlStringFormatter(FormatDelegate expression)
        {
            Delegate = expression;
        }

        protected HtmlStringFormatter()
        {

        }

        public static HtmlStringFormatter Create(FormatDelegate expression)
        {
            return new HtmlStringFormatter(expression);
        }
    }

    public class CapitalLetterFormatter : HtmlStringFormatter
    {
        public CapitalLetterFormatter()
        {
            Delegate =
                s => new CultureInfo("en-US", false).TextInfo.ToTitleCase(s).ToString(CultureInfo.InvariantCulture);

        }
    }
}

不要忘记将以下行添加到Views文件夹中的Web.Config:

<add namespace="MvcPlay.HelperExtensions" />
<add namespace="MvcPlay.HtmlStringFormatting"/>

这将自动包括Formatters和Helper Extension,因此您无需将其包含在要使用它的每个视图中。

答案 5 :(得分:2)

您可以使用C#代码:示例来自:http://www.dotnetperls.com/uppercase-first-letter

using System;

class Program
{
    static void Main()
    {
    Console.WriteLine(UppercaseFirst("samuel"));
    Console.WriteLine(UppercaseFirst("julia"));
    Console.WriteLine(UppercaseFirst("john smith"));
    }

    static string UppercaseFirst(string s)
    {
    // Check for empty string.
    if (string.IsNullOrEmpty(s))
    {
        return string.Empty;
    }
    // Return char and concat substring.
    return char.ToUpper(s[0]) + s.Substring(1);
    }
}

答案 6 :(得分:0)

我知道原始问题涉及将整个字符串中的每个单词大写。但是,我来到这里试图找到一个解决方案来大写字符串的第一个字母。我同意kiflay的答案是OP的最佳解决方案。但是,在我的使用中扩展它只修改第一个字母。

CSS:

blockquote::first-letter {
text-transform: capitalize;}

答案 7 :(得分:0)

只需使用如下

@System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(sampleText)

答案 8 :(得分:0)

在Bootstrap 4.x和Razor中使用CSS来大写首字母:

<p class="text-capitalize">CapiTaliZed text.</p>