Asp.net mvc 相对于变量ActionResult的MVC Url

Asp.net mvc 相对于变量ActionResult的MVC Url,asp.net-mvc,relative-path,Asp.net Mvc,Relative Path,对MVC来说相当陌生。我的问题是,我有一个控制器,它有3个不同的ActionResult,根据枚举调用 所有三个操作结果都返回相同的视图,但作为视图模型的列表不同。在视图中,用户应能够单击列表中的项目,并根据项目ID查看详细信息。 e、 g.Site/facility/Libraries返回库列表,Site/facility/Libraries/1返回详细信息。当您输入完整路径但在视图本身上单击锚定点时,这可以正常工作 <a href="@item.ID">@item.Name<

对MVC来说相当陌生。我的问题是,我有一个控制器,它有3个不同的ActionResult,根据枚举调用
所有三个操作结果都返回相同的视图,但作为视图模型的列表不同。在视图中,用户应能够单击列表中的项目,并根据项目ID查看详细信息。
e、 g.Site/facility/Libraries返回库列表,Site/facility/Libraries/1返回详细信息。当您输入完整路径但在视图本身上单击锚定点时,这可以正常工作

<a href="@item.ID">@item.Name</a>

在列表中的项目上,返回Url Site/Facilities/1,而不是Site/Facilities/Libraries/1。我不能使用ActionLink,因为要调用的操作是动态的。我知道这可以通过为每种类型创建不同的视图来解决,但我想知道是否还有其他方法?


提前感谢。

我建议您更改它,这样您只有一个操作,但它会使用一个参数,并根据参数将不同的列表推送到视图中(可能使用3个不同的“帮助函数”)。这至少是我将如何实现你所描述的

祝你好运

您可以使用这样的代码(javascript技巧):


或者,如果要使用href属性,可以使用以下代码:

<%=Html.ActionLink(item.Name, "Facilities", ViewData("ActionName"), new {id = item.ID}) %>


(在这种情况下,您必须在控制器中指定ViewData(“ActionName”)。

这是我最初实现它的方式,但如果有人复制列表的url(或将其标记为书签),然后再次使用它,它不会接受参数,并且会失败。为什么不复制和/或将其标记为书签?因为参数包含在URL中,所以它也应该出现!(除非用户删除该部分,但这是他们的问题,不是吗?^^^)使用一些奇特的路由,您将拥有完美的URL。但是很好,你找到了一个你满意的答案:)我尝试了第二个选择,它很简单,我很惭愧我没有想到它。理想情况下,它需要在没有Javascript的情况下工作,因为它是用于移动开发的,而且并非所有手机都有Javascript可用。第二个选择很好。谢谢
<%=Html.ActionLink(item.Name, "Facilities", ViewData("ActionName"), new {id = item.ID}) %>