我有一个ASP.NET MVC Web应用程序,在一个页面上,我希望显示一个项目表,其中包含指向该项目详细信息的链接。很基本的。但是,我希望在列表中显示的项目都是公共基类型的子类,因此链接需要引用不同的控制器操作。
所以,我的问题是:我应该在哪里/如何构建这些链接(参见下面的例子)?
我已经可以通过多种方式实现我的目标(例如,在将业务对象映射到视图模型时构建路径,在视图模型中使用标志或魔术字符串,使用单个“基础”控制器操作来选择适当的视图,但是没有一个看起来特别“干净”,所以这更像是一个关于最佳实践的问题,而不是力学。
举例来说,假设我的'Assignments'表格如下:
Id <OtherCommonFields> Type Name Link
1 <some data> Event Some event /event/1
4 <some data> Task Some task /task/4
3 <some data> Event Another event /event/3
2 <some data> Task Another task /task/2
5 <some data> Event One more event /event/5
'任务'和'事件'都是'作业'的子类。
答案 0 :(得分:0)
我想说的简短版本是创建一个名为AssignmentLink的新动作链接扩展方法,在其中传入id和类型。
在assignlink方法中,对类型进行切换并以actionlink的形式返回正确的url。 这样,如果您添加不同类型的任务或其他任何内容,您可以在一个中央帮助器中控制所有内容。在以前的mvc应用程序中,超链接给我们带来了很多麻烦。当我们重命名控制器,或将控制器移动到新区域等时,更新对该控制器的所有引用都将永远。所以在我们最近的项目中,我们将所有超链接逻辑包装到一个名为“linkdata”的对象中
然后,我们为linkdata对象创建扩展,使用帮助器或扩展中的任何逻辑。http://codingsmith.co.za/extending-the-actionlink-helper-in-mvc/如果你有兴趣,但是你可以在你的例子中远远少于逃避,只需要一个简单的扩展即可。