我想像这样设计我们的控制器和动作:
每个Controller都有一个Action,名为“StaticPage(string page)”(考虑创建一个BaseController来从中派生出来但是现在,我们只讨论“Suite”作为Controller)。
此Action返回视图,其中主要包含HTML代码而不包含模型。
因此,我想要一个Action来管理并通过参数区分它们,而不是为20个简单的视图创建20个动作。
但是在同一个Controller上,我希望他们拥有使用Model返回Views的Action,并执行更复杂和数据库相关的操作。首先,我考虑了以下路线(注意:在此场景中,存在“Product”区域):
context.MapRoute(
"Product_default",
"Product/{controller}/{action}",
new { action = "index"}
);
context.MapRoute(
"StaticPage_Route",
"Product/{controller}/{page}",
new { action = "StaticPage", page = UrlParameter.Optional
);
所以我们说我们得到了View TechnicalSpecification.cshtml 和 TrivialPage.cshtml ,当我打电话给
/产品/套件/ TechnicalSpecification
它应该搜索并找到Action“TechnicalSpecification”,但是当我尝试
时/产品/套件/ TrivialPage
它还应首先搜索Action“TrivialPage”。但是,当它找不到它时,它应该将它视为一个名为page的参数(就像我上面提到的路径一样)。
但我真的不知道,如何妥善处理这个问题。 有没有设置自定义ActionFilter属性的方法,它检查OnActionExecuted(...)中的某些内容然后执行某些操作来调用“StaticPage”-Action?
答案 0 :(得分:0)
我自己找到了解决方案 重写HandleUnknownAction可以解决问题。 代码如下所示:
protected override void HandleUnknownAction(string actionName)
{
this.View(actionName).ExecuteResult(this.ControllerContext);
}
此外,不再需要路线“StaticPage_Route”,所以我删除了该路线。
通过这个,我只需要将普通的视图放在相应的View-folder中,如果可用的话,override方法会调用它们。
有了这个,我可以节省很多琐碎的代码,不需要实现这些网站。