问题描述
我在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_ItemID
为null
时。
否则,它对于包含任何值(包括空字符串)的字符串都适用。
您能否尝试添加像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)