在 Html.DisplayFor 中的 table 循环中添加子字符串

Adding Substring in table loop in Html.DisplayFor

我只是问如何在 Razor 中实现 Substring 代码 Html DisplayFor

实际上它在工作之前我添加了子字符串以获取 table 中的前 5 个数字然后我遇到了错误

An exception of type 'System.InvalidOperationException' occurred in System.Web.Mvc.dll but was not handled in user code
Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions.

这是我的一组代码:

<tbody>
        @for (var i = 0; i < Model.Cards.Count; ++i)
             {
                var counter = i + 1;
                <tr>    
                    <td valign="middle"> 
                        <p class="small">@counter</p>
                    </td>
                    <td valign="middle">
                        <p class="small">@Html.DisplayFor(x => x.Cards[i].Number.Substring(0,5))</p>
                    </td>
               </tr>
             }
</tbody>

提前致谢!

正如斯蒂芬在评论中所说,在您的视图中间使用 .Substring 并没有真正意义。

相反,在您的 ViewModel(定义您的 Number 属性 的视图模型)中,添加以下内容 属性 :

public string DisplayableNumber => Number.Length > 5 ? Number.ToString().Substring(0, 5) : "WhatYouWantHere";

这适用于 C# 5+,否则您可以使用旧方法并在默认构造函数中对其进行初始化。

然后,在您的视图中使用它:

@Html.DisplayFor(x => x.Cards[i].DisplayableNumber)

此外,在 ViewModel 中使用这种类型的 属性 是一种很好的做法,因为视图不应处理任何逻辑。