如何在asp.net mvc中保护slash并避免";未能映射路径“;错误

本文关键字:quot 映射 错误 路径 net asp mvc slash 保护 | 更新日期: 2023-09-27 17:59:48

我在ASP的一个区域中有这个剃刀html。NET MVC项目:

<td>
    @Html.DisplayFor(x => x.AMOAResponsible, Model.AMOAResponsible ?? string.Empty)
</td>

当AMAResponsible的值类似于"Lorem Ipsum"时,一切都还好。但有时值"AMAResponsible"包含斜线(例如"LOREM/IPSUM"),然后我会得到以下错误:

未能映射路径'/Areas/Dashboard/Views/Psr/DisplayTemplates/LOREM/IPSUM.aspx'.

我不知道怎么解决这个问题。我可以保护"/"吗?

如何在asp.net mvc中保护slash并避免";未能映射路径“;错误

您使用@HtmlDisplayFor()的此重载,其中第二个参数是templateName,并指定用于呈现属性的DisplayTemplate的名称

如果AMOAResponsible的值是(比如)"Lorem",该方法将搜索/Views/yourControllerName/DisplayTemplates文件夹并搜索一个名为Lorem.cshtmlLorem.aspx的文件,该文件不存在,因此它将在同样不存在的/Views/Shared/DisplayTemplates中搜索,因此它使用默认的DisplayTemplate(没有抛出异常,只是浪费了一些处理时间)

但是,如果值为Lorem/Ipsum,它将在/Views/yourControllerName/Lorem/DisplayTemplates中开始搜索,但由于文件夹不存在,因此引发异常。

我假设您相信,如果Model的值为,Model.AMOAResponsible ?? string.Empty将呈现一个"空字符串"。AMAResponsible是null,但助手无论如何都会这样做(即不生成输出),所以只需删除它。助手应该只是

@Html.DisplayFor(x => x.AMOAResponsible)