在MVC辅助方法中打印每个单词的第一个字母[重复]
Posted
技术标签:
【中文标题】在MVC辅助方法中打印每个单词的第一个字母[重复]【英文标题】:Print first letter of every word in MVC helper method [duplicate] 【发布时间】: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[]
任何帮助将不胜感激
【问题讨论】:
那个字符数组包含名字和姓氏的第一个字母..你已经有了自己的答案 【参考方案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();
【讨论】:
以上是关于在MVC辅助方法中打印每个单词的第一个字母[重复]的主要内容,如果未能解决你的问题,请参考以下文章