我是MVC的新手,并没有在网上找到解决方案。
我的html为:
@Html.DisplayFor(model => model.Address1) <br />
我希望地址1的所有首字母都是大写字母,例如Something Road而不是道路。
现在我有一个类客户端和属性Address1并使用EF来获取如下地址:
public class MyDBContext : DbContext
{
public DbSet<Client> Clients { get; set; }
}
希望它有意义。
答案 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>