在Html.DisplayFor中的表循环中添加Substring

问题描述 投票:0回答:1

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

实际上它之前工作我添加了Substring来获取表中的前5个数字然后我遇到了一个错误

System.Web.Mvc.dll中出现“System.InvalidOperationException”类型的异常,但未在用户代码中处理 模板只能用于字段访问,属性访问,单维数组索引或单参数自定义索引器表达式。

这是我的代码集:

<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>

提前致谢 !

html asp.net-mvc linq asp.net-mvc-4 razor
1个回答
0
投票

正如斯蒂芬在评论中所说,在你的观点中间使用.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中使用这种类型的属性是一种很好的做法,因为Views不应该处理任何逻辑。

© www.soinside.com 2019 - 2024. All rights reserved.