MVC Razor需要获取Substring
本文关键字:获取 Substring Razor MVC | 更新日期: 2023-09-27 18:25:31
我的视图中有以下内容
@Html.DisplayFor(modelItem => item.FirstName)
我需要得到名字的第一个首字母。
我试过
@Html.DisplayFor(modelItem => item.FirstName).Substring(1,1)
但它似乎不起作用。我得到以下错误:..'System.Web.Mvc.MvcHtmlString"不包含"Substring"的定义,也没有扩展
您可以在视图中实现如下:
@Html.DisplayFor(modelItem => modelItem.FirstName).ToString().Substring(0,5)
我可以建议视图不是执行此操作的正确位置吗。您可能应该有一个单独的模型属性FirstInitial
,它包含逻辑。您的视图应该只显示这一点。
public class Person
{
public string FirstName { get; set; }
public string FirstInitial
{
get { return FirstName != null ? FirstName.Substring(0,1) : ""; }
}
...
}
@Html.DisplayFor( modelItem => modelItem.FirstInitial )
您应该为此在ViewModel上放置一个属性,而不是试图在视图代码中获取它。视图的唯一职责是显示模型赋予它的内容,而不应该从模型中创建新数据。
您可以使用如下所示的自定义扩展方法:
/// <summary>
/// Returns only the first n characters of a String.
/// </summary>
/// <param name="str"></param>
/// <param name="start"></param>
/// <param name="maxLength"></param>
/// <returns></returns>
public static string TruncateString(this string str, int start, int maxLength)
{
return str.Substring(start, Math.Min(str.Length, maxLength));
}
这对我有效(没有助手):
@item.Description.ToString().Substring(0, (item.Description.Length > 10) ? 10 : item.Description.Length )
这将截断10个字符并添加"如果长度超过13个字符,则一直到最后。
@if (item.Notes.Length <= 13)
{
@Html.DisplayFor(modelItem => item.FirstName)
}
else
{
@(item.FirstName.ToString().Substring(0, 10) + "...")
}
在试图解决这个问题时,我学到了两件事,它们是关键:
- Razor允许C#,这意味着.Substring(0,1)方法可以工作
- (我哪里错了)-小心你的物品。第一个名称都不是空的,或者包含的字符比请求作为字符串长度
我的解决方案如下:
string test = item.FirstName.ToString();
string test_add = ""; //creating an empty variable
if(test.Length == 0) //situation where we have an empty instance
{
test_add = "0"; //or whatever you'd like it to be when item.FirstName is empty
}
else
{
test_add = test.Substring(0, 1);
}
您可以在剃刀代码中使用@test_add来代替@item.FirstName
如果您只想显示item.FirstName
的第一个字符,为什么不这样做:
@Html.DisplayFor(modelItem => item.FirstName.Substring(1,1))
你把它放错了括号的一边。