如何保护asp.net mvc中的斜杠并避免“无法映射路径”错误?

时间:2015-06-26 11:27:23

标签: c# asp.net-mvc asp.net-mvc-4 razor

我在ASP.NET MVC项目的某个区域中有这个razor html:

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

当AMOARsponsible的价值类似于“Lorem Ipsum”时,一切都很好。 但有时值“AMOAResponsible”包含斜杠(例如“LOREM / IPSUM”),然后我收到以下错误:

  

无法映射路径   '/Areas/Dashboard/Views/Psr/DisplayTemplates/LOREM/IPSUM.aspx'。

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

1 个答案:

答案 0 :(得分:3)

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

如果/Views/yourControllerName/DisplayTemplates的值是(例如)&#34; Lorem&#34;,该方法将搜索Lorem.cshtml文件夹并搜索名为Lorem.aspx或{{的文件1}},它不存在,所以它然后在/Views/Shared/DisplayTemplates中搜索也不会存在,所以它使用默认的DisplayTemplate(没有抛出异常 - 但只是浪费了一些处理时间)

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

我认为你认为Model.AMOAResponsible ?? string.Empty会呈现一个空字符串&#39;如果Model.AMOAResponsible的值是null,但帮助者仍然这样做(即不生成输出),所以只需将其删除即可。助手应该只是

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