MVC EditorFor 到 Title Case

MVC EditorFor to Title Case

在 EditorFor 中如何将输入值转换为标题大小写?我知道做

@Html.EditorFor(model, new { htmlAttributes = new { @style = "text-transform:uppercase" } })

只会更改客户端,因此我需要在服务器端手动更改它。

我尝试添加 class text-capitalize 但似乎不成功。

提前致谢。

我建议在此 属性 的 getter 使用 .ToUpper()

执行此转换
get {
  if (string.IsNullOrEmpty(_value))
     {
       return _value;
     }
   return _value.ToUpper();
 }

以下是对绑定到 EditorFor 的视图模型的字符串属性使用标题大小写或句子大小写的解释:

1) 如果你想使用首字母大写,你可以在 getter 部分使用 ToTitleCase 方法设置它(根据你的要求将 CurrentCulture 更改为 InvariantCulture ),如下例所示:

private string _titleCase;
private System.Globalization.CultureInfo culture = System.Threading.Thread.CurrentThread.CurrentCulture;

public string TitleCaseProperty
{
    get
    {
        if (string.IsNullOrEmpty(_titleCase))
        {
            return _value;
        }
        else 
        {
            return culture.TextInfo.ToTitleCase(_titleCase.ToLower());
        }
    }
    set
    {
        _titleCase = value;
    }
}

查看使用情况

@Html.EditorFor(model => model.TitleCaseProperty, ...)

2)如果你想要句子大小写,使用正则表达式找出序列(引用自this similar issue)并像上面的getter部分那样做类似的方法:

private string _sentenceCase;
private Regex rgx = new Regex(@"(^[a-z])|[?!.:,;]\s+(.)", RegexOptions.ExplicitCapture);

public string SentenceCaseProperty
{
    get
    {
        if (string.IsNullOrEmpty(_sentenceCase))
        {
            return _value;
        }
        else 
        {
            return rgx.Replace(_sentenceCase.ToLower(), s => s.Value.ToUpper());
        }
    }
    set
    {
        _sentenceCase = value;
    }
}

查看使用情况

@Html.EditorFor(model => model.SentenceCaseProperty, ...)

实例:.NET Fiddle Demo

更简单的方法

@Html.TextBoxFor(model.FieldName, new { @class = "uppercase" })

css:

.uppercase { text-transform:uppercase }