ASP.Net MVC:在不同控制器中的相同操作名称

问题描述:

我有两个控制器分别是SearchController和SearchByStaffController。他们非常相似,都有一个动作名称为“搜索”。当我在他们共同的超类中调用View(“Search”)时,会产生混淆。只有带有SearchController的“搜索”视图才会呈现。ASP.Net MVC:在不同控制器中的相同操作名称

  1. MVC框架是否只获得与名称匹配的第一个视图并忽略其余的?
  2. 我试图在View()中传递视图路径,它工作。这样做会有什么副作用吗?我在网上搜索,似乎以前没有人做过。

谢谢!

+1

您可以发布您的代码和文件夹结构的看法? –

Does the MVC framework get only the first view that matches the name and ignore the rest? 

是的。路由规则经过分析(从上到下),并且规则全部匹配。

I tried to pass the view path in View() and it worked. Would there be any side effect for doing so? I searched over the web and seems no one has done this before. 

你可以但我不喜欢,因为MVC是基于约定。所以,我认为强制视图的途径是打破常规的一种方式。你确定你不能简单地为这两种方法创建两个路由规则吗?所以,你可以做这样的事情:

return RedirectToAction("Search", "Controller1"); 

return RedirectToAction("Search", "Controller2"); 
+0

谢谢Iridio,是的,它打破了惯例,但可悲的是我无法做任何关于路由规则,这一切都取决于管理层的决定:( – jackielpy

user932390,

mvc使用约定而不是配置。这意味着“搜索”视图将必须位于两个:分别

views/SearchByStaff 

views/Search 

。唯一的解决方法是在 views/shared文件夹下找到搜索视图,然后viewengine会在两种情况下找到它并使用它(假设它们具有相同的模型)。