2

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

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

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

我尝试添加课程text-capitalize,但似乎没有运气。

提前致谢。

4

3 回答 3

1

我建议使用此属性的 getter 执行此转换.ToUpper()

get {
  if (string.IsNullOrEmpty(_value))
     {
       return _value;
     }
   return _value.ToUpper();
 }
于 2018-07-27T05:53:46.610 回答
1

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

1)如果你想使用标题大小写,你可以在getter部分用ToTitleCase方法设置它(根据你的要求更改CurrentCultureInvariantCulture,如下例所示:

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)如果你想要句子大小写,使用正则表达式来找出序列(引用自这个类似的问题),并像上面一样对 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 演示

于 2018-07-27T09:06:42.300 回答
0

更简单的方法

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

CSS:

.uppercase { text-transform:uppercase }
于 2018-07-27T10:43:10.833 回答