【发布时间】:2012-10-18 02:43:43
【问题描述】:
我有一个具有“一般”路线结构的网站,以及一个额外的“翻译”区域。所以在顶层,你有类似的东西:
- /
- /关于(“通用”)
- /平移(区域)
在翻译区域内,我有:
- /Translate/Word(WordController,索引操作)
- /Translate/Word/Add(WordController,添加操作)
- /Translate/Word/Improve(WordController,改进操作)
所有这些工作。
但是,只要我在现有结构中添加另一个控制器,例如。定义...
- /翻译/定义(DefinitionController,索引操作)
- /翻译/定义/添加(定义控制器,添加操作)
或发音...
- /翻译/发音(PronunciationController,索引操作)
- /翻译/发音/添加(PronunciationController,添加操作)
我得到的只是 404。
我所在区域的路由配置如下:
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Translate_direct",
"Translate/{controller}/{action}",
new { action = "Index", controller = "Default", }
);
context.MapRoute(
"Translate_default",
"Translate/{toLanguageCode}/{query}/{fromLanguageCode}/{controller}/{section}/{action}/{id}",
new { action = "Index", controller="Default", id = UrlParameter.Optional, section=UrlParameter.Optional }
);
}
我已经安装了Phil Haack's RouteDebugger,结果如下:
所以它似乎与控制器和动作匹配,但我只得到一个 404。
为了完整性和保证,还显示了我的“MVC”文件结构:
我显然遗漏了一些明显的东西,但不确定是什么......?
更新:
似乎我的命名空间以某种方式涉及。
我的 TranslateAreaRegistration 类有命名空间 Taggloo.Web.Client.Areas.Translate 但我的 PronunciationController 有一个命名空间 *Taggloo.Web.**Mvc.**Client.Areas.Translate.Controllers *
似乎我的命名空间中的一个错误导致两者不同(TranslateAreRegistration 类也应该在 Taggloo.Web.Mvc.Client.Areas.Translate 命名空间中)是问题。我尝试让它们都 Taggloo.Web.Mvc.... 但这不起作用。我不情愿地将两者都设置为 Taggloo.Web.Client... 而现在它可以工作了。
所以不是一个解决方案,一个变通方法,尽管环顾四周,我仍然不知道为什么。
【问题讨论】:
-
您好,您想要的只是在所有控制器中拥有相同的命名空间。我的两个控制器分别位于不同的文件夹中,即 Log 和 Error 。一切似乎都对我有用,例如
code namespace Web.Controllers { public class LogController : Controller { } } namespace Web.Controllers { public class ErrorController : Controller { } } -
啊,谢谢@NipunAmbastha。似乎我错过了我的一个控制器。
标签: asp.net-mvc asp.net-mvc-routing