在HTML ActionLink中使用替换

问题描述

我在MVC5 / C#中有一个应用程序

我的索引视图是来自模型的简单列表。我添加了一个额外的html actionlink来查看任何选定项目的历史记录。通过此链接,我将转到另一个控制器(ICS_HistoryView)并传递一个id参数。

最初,它中断了,因为其中某些项目(Old_ItemID字段)中包含/,导致链接中断。因此,在进行了一些研究之后,我了解到可以使用Replace来用/替换-,因此该URL不会中断,然后在新视图的控制器中将其切换回原来的位置。但是,在该行上加载视图时,出现空错误

@Html.ActionLink("History","History","ICS_HistoryView",new { id = item.Old_ItemID.Replace('/','-')},null)

但是,如果没有“替换”,它将正确加载。仅当我单击“历史记录”链接时,URL才会用参数中的/断开。

@Html.ActionLink("History",new { id = item.Old_ItemID},null)

有人可以帮助我理解为什么当我使用replace并破坏代码时它变为null吗?

如果需要,我可以提供控制器代码,但这确实很简单。这只是一个列表视图。

示例:

Old_ItemID = VNC / 2/1

如果没有替换,我将获得带有参数VNC / 2/1的正确url,但是找不到页面,很明显

添加“替换”后,我得到一个空错误-我不明白为什么

解决方法

我怀疑此错误的唯一原因是item.Old_ItemIDnull时。 否则,它对于包含任何值(包括空字符串)的字符串都适用。 您能否尝试添加像item.Old_ItemID?.Replace("/","-")

这样的空条件运算符

为获得最佳实践,我建议在Model / Domain类中进行此类操作。 在Item (or whatever class that is)中创建Get属性或方法以替换URL中的标记。 即

public string OldItemIdForUrlGeneration => this.Old_ItemID.Replace("/","-");

然后

@Html.ActionLink("History","History","ICS_HistoryView",new { id = item.OldItemIdForUrlGeneration },null)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...