我应该如何构建链接到不同控制器操作的项目列表?

时间:2012-04-16 08:39:08

标签: asp.net-mvc

我有一个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

'任务'和'事件'都是'作业'的子类。

1 个答案:

答案 0 :(得分:0)

我想说的简短版本是创建一个名为AssignmentLink的新动作链接扩展方法,在其中传入id和类型。

在assignlink方法中,对类型进行切换并以actionlink的形式返回正确的url。 这样,如果您添加不同类型的任务或其他任何内容,您可以在一个中央帮助器中控制所有内容。

在以前的mvc应用程序中,超链接给我们带来了很多麻烦。当我们重命名控制器,或将控制器移动到新区域等时,更新对该控制器的所有引用都将永远。所以在我们最近的项目中,我们将所有超链接逻辑包装到一个名为“linkdata”的对象中

然后,我们为linkdata对象创建扩展,使用帮助器或扩展中的任何逻辑。

http://codingsmith.co.za/extending-the-actionlink-helper-in-mvc/如果你有兴趣,但是你可以在你的例子中远远少于逃避,只需要一个简单的扩展即可。