我们可以重载 MVC 控制器操作方法吗? [复制]

Posted

技术标签:

【中文标题】我们可以重载 MVC 控制器操作方法吗? [复制]【英文标题】:Can we overload MVC controller action methods? [duplicate] 【发布时间】:2015-12-06 17:44:13 【问题描述】:

我试图重载控制器方法或动作我能够编写控制器动作并编译但我仍然没有得到结果。

   public ActionResult Contact()
    
        ViewBag.Message = "Your contact page.";

        return View();
    
    public ActionResult Contact(string str)
    
        ViewBag.Message = "Your contact page by overloaded method";

        return View();
    

但我仍然收到以下错误 “/”应用程序中的服务器错误

【问题讨论】:

因为两者都是同一个动作的[HttpGet],所以只有在HTTP动词不同的情况下才可以重载同名,否则使用不同的名字。正如thangadurai所建议的那样,动作名称属性也将很有帮助 不,你不能。但是你可以使用 ActionName 属性来模拟它。 【参考方案1】:

您会遇到冲突,因为 string 可以为空。

您可以使用[ActionName("NewActionName")] 来提供不同的操作名称,方法名称保持不变。

如果您有其他类似的操作方法,则不应发生冲突

public ActionResult Contact(int Value)

但是,下面的操作会再次失败

public ActionResult Contact(int? Value)

原因很明显。该参数再次可以为空。

【讨论】:

以上是关于我们可以重载 MVC 控制器操作方法吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

mvc JQuery 修改

我应该用Serializable标记spring mvc DTO吗? [复制]

为啥我的 MVC 控制器返回 JSON 用引号括起来且未格式化? [复制]

我们可以从构造函数中调用异步方法吗? [复制]

C 有函数覆盖吗? [复制]

c++中重载输出操作符,为啥要返回引用