当前位置:  开发笔记 > 后端 > 正文

如何为我的控制器设置"默认操作",当没有其他操作匹配时将调用该操作?

如何解决《如何为我的控制器设置"默认操作",当没有其他操作匹配时将调用该操作?》经验,为你挑选了2个好方法。

说我有以下路线:

routes.MapRoute("Default", "{controller}/{action}/{id}", 
    new { controller = "Home", action = "Index", id = "" });

让我们说我的控制器有以下方法:Index(Int32 id)Edit(Int32 id).

所以,/MyController/Index/1是该路线有效的URL.也是/MyController/Edit/1

但是,如果收到的URL正确映射到我的控制器而不是现有操作,那么如何定义要执行的"默认操作"而不是让MVC框架抛出错误屏幕?

基本上我想要URL /MyController/Preview/1/MyController/Whatever/1执行我提前指定的操作,此时{action}令牌无法映射到我的控制器上的现有操作.

我看到Codeplex上的MvcContrib项目有一个属性,可以使它与ConventionController一起使用,但我现在想用纯MS ASP.NET MVC保留它.

我也看到Fredrik提到了一个[ControllerAction(DefaultAction = true)]属性,但除了他的博客之外我无法在任何地方找到它(当我在我的控制器中尝试时,我的应用程序将无法编译).



1> Haacked..:

您现在可以执行以下操作.

protected override void HandleUnknownAction(string actionName) {
  //your code here.
}

另一种方法是,你穿上的缺省路由的约束,因此只有符合你的方法知道存在控制器上.然后你可以有另一条路线:

routes.MapRoute("default-action", "{controller}/{actionName}/{id}", new {action="DefaultAction"});

哪个映射到

public ActionResult DefaultAction(string actionName, string id) {
  //handle default action
}

这可以获得您正在寻找的结果.



2> Matthew Nich..:

Farooq Kaiser在这个主题上做了一篇关于CodeProject的文章,我觉得它很有用: 处理ASP.NET MVC中的未知操作

我特别喜欢创建"仅查看"页面的技巧(显然应该添加错误处理代码):

protected override void HandleUnknownAction(string actionName)
{
   this.View(actionName).ExecuteResult(ControllerContext);
}

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有