8

我是 MVC 新手,还没有在线找到解决方案。

我的 html 为:

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

我希望address1的所有第一个字母都是大写字母,例如Something Road而不是Something Road。

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

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

希望这是有道理的。

4

9 回答 9

21

简单的解决方案可能是

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

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

.form-control {
text-transform:capitalize;
}
于 2015-08-24T10:28:52.030 回答
6

您可以添加一个带有在标题案例Client中返回的属性的部分类:Address1

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

然后,您将TitleCaseAddress1在 Razor 中使用:

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

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

于 2012-10-03T16:44:36.133 回答
4

最好将表示层和数据访问层分开。创建一个包装或翻译 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;
        }
    }
}
于 2012-10-03T16:47:35.727 回答
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))
于 2016-01-06T17:50:28.330 回答
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);

        }
    }
}

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

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

这将自动包含格式化程序和帮助程序扩展,因此您无需将其包含在要使用它的每个视图中。

于 2012-10-03T19:36:21.243 回答
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);
    }
}
于 2012-10-03T16:37:36.950 回答
1

只需简单地使用如下

@System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(sampleText)
于 2018-02-21T04:53:50.057 回答
0

我知道最初的问题是指将整个字符串中的每个单词都大写。但是,我来到这里试图找到一种将字符串的第一个字母大写的解决方案。我同意 kiflay 的回答作为 OP 的最佳解决方案。但是,在我的使用中,将其扩展为仅修改第一个字母。

CSS:

blockquote::first-letter {
text-transform: capitalize;}
于 2017-04-18T20:45:57.380 回答
0

使用带有 Razor 的 Bootstrap 4.x,您可以使用 CSS 将第一个字母大写:

<p class="text-capitalize">CapiTaliZed text.</p>
于 2020-02-18T14:33:02.277 回答