在 html 内使用替换操作链接

Using Replace within html actionlink

我在MVC5/C#

申请了

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

最初它坏了,因为某些项目(Old_ItemID 字段)中有 /,导致 link 坏了。因此,经过一些研究,我了解到我可以使用 Replace 将 / 替换为 -,因此 url 不会中断,然后在新视图的控制器中将其切换回来。但是,当视图加载时,我在这一行

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

但是,如果没有替换,它会正确加载。只有当我点击历史记录 link 时,url 才会与参数中的 / 断开。

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

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

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

示例:

Old_ItemID = VNC/2/1

没有替换,我得到正确的 url 和参数 VNC/2/1 但我找不到页面,显然

添加替换时,出现空错误 - 我不明白为什么

我怀疑此错误的唯一原因是 item.Old_ItemIDnull。 否则它适用于具有任何值的字符串,包括空字符串。 您可以尝试添加 null-condition 运算符,例如 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)