【问题标题】:Print first letter of every word in MVC helper method [duplicate]在MVC辅助方法中打印每个单词的第一个字母[重复]
【发布时间】:2019-01-27 12:58:54
【问题描述】:

我在一个 MVC 视图上有这个帮助方法,它返回用户的名字和姓氏(Windows autheticated 应用程序)

@helper AccountName()
{
    using (var context = new PrincipalContext(ContextType.Domain))
    {
        var principal = UserPrincipal.FindByIdentity(context, User.Identity.Name);
        @principal.GivenName<text> </text>@principal.Surname
    }
}

如何提取用户的首字母(名字的首字母和姓氏的首字母)?

我用 linq 试过了:

@AccountName().ToString().Split(' ').Select(x => x[0]).ToArray()

但结果是:

System.Char[]

任何帮助将不胜感激

【问题讨论】:

  • 那个字符数组包含名字和姓氏的第一个字母..你已经有了自己的答案

标签: c# asp.net-mvc razor


【解决方案1】:

如果您想将第一个字母输出为字符串而不是字符数组(为了使ToString 工作),请使用字符串构造函数。这已经提到here

但是,要使其工作,您确实需要将其包装在代码块中 (@(...))。然后它会正确打印。

@(new string(@AccountName().ToString().Split(' ').Select(x => x[0]).ToArray()))

【讨论】:

  • 我需要让这段代码在 MVC 视图上工作...
  • 那么,为什么它不起作用?
  • 预期类型编译错误。
  • 如果你把它包装在一个块中 @(...)?
  • 你说得对...谢谢!
【解决方案2】:

我会使用简洁的正则表达式;

// This could be compiled and cached.
var initialsRegex = new Regex(@"(\b[a-zA-Z])[a-zA-Z]*\.* ?"); 

// This gives the initials
var initials = initialsRegex.Replace(AccountName, "$1");

这还将包括包含带有 . 首字母缩写的名称,即 John S. Doe

【讨论】:

    【解决方案3】:

    你也可以试试

    foreach (string s in @AccountName.Split(" ".ToCharArray()))
        shortName += s.Substring(0,1).ToUpper();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-21
      • 1970-01-01
      • 2014-04-11
      • 1970-01-01
      • 1970-01-01
      • 2015-04-17
      • 2019-06-02
      • 2019-05-05
      相关资源
      最近更新 更多