已经使用相同的参数类型定义了一个名为“Create”的成员[重复]

Posted

技术标签:

【中文标题】已经使用相同的参数类型定义了一个名为“Create”的成员[重复]【英文标题】:already defines a member called 'Create' with the same parameter types [duplicate] 【发布时间】:2013-12-01 08:15:48 【问题描述】:

我有两种方法,不同的是http动词:

public class ProductImageController : Controller

     [HttpGet]
     public ViewResult Create(int productId)
          
             return View(productId);
          

      [HttpPost]
      public ViewResult Create(int productId)
          
          

但得到错误:

已经使用相同的参数类型定义了一个名为“Create”的成员

【问题讨论】:

【参考方案1】:

您不能在同一范围内拥有多个具有相同签名的方法,即相同的返回类型和参数类型。

编辑- 看起来你需要使用这个:Related question

public class ProductImageController : Controller

     [HttpGet]
     public ViewResult Create(int productId)
     
         return View(productId);
     

    [HttpPost]
    [ActionName("Create")]
    public ViewResult CreatePost(int productId)
    
        //return a View() somewhere in here
    

【讨论】:

亲爱的 @chrise 在 mvc 我们可以。我们可以通过 http 动词来区分 我通常只是在签名中添加一个额外的变量。在大多数情况下,我会添加, string differentsignature。这也解决了问题,但可能稍微不那么优雅。 这应该是选择的答案,我之前从未见过ActionName属性。【参考方案2】:

如下更改发布操作方法:

[HttpPost]
public ViewResult Create(FormCollection formValues)

       var productId = formValues["productId"];

[HttpPost]
public ViewResult Create(int  productId, FormCollection formValues)

 //still using productId, formValues is just an additional parameter 
 //that doesn't need to be implemented.

【讨论】:

亲爱的@Lin tnx,但是为什么我们可以在同一个控制器中使用具有相同签名和不同 http 动词(post 和 get)的 Index 方法,但是对于 create 我不能?!! 将传入的浏览器请求映射到指定的 MVC 控制器操作需要 MVC 路由引擎和 HTTP 请求。默认情况下,操作方法参数的值是从请求的数据集合中检索的。首先,当传入的浏览器请求与“RouteConfig.cs”中的路由规则匹配时,它会根据 Http 方法(GET,POST...)选择操作方法。但是,如果 Action 方法名称相同,参数类型相同,只是 Http 方法不同,MVC 路由引擎无法理解该采取什么 action 方法。 我从未见过任何 Action 方法,包括具有相同签名和不同 http 动词(post 和 get)的 Index 方法,可以无错误地通过构建。如果你有一个例子,我想看看。那么也许我们可以弄清楚。

以上是关于已经使用相同的参数类型定义了一个名为“Create”的成员[重复]的主要内容,如果未能解决你的问题,请参考以下文章

名为“名称”的操作不符合所需的签名。参数类型必须是实体类型或预定义的可序列化类型之一

如何制作一个以用户定义的表类型为参数并在sql中返回相同的函数?

使用多个表源合并(用户定义的表类型和输入参数)

sass

定义两个具有相同参数类型的方法

具有相同分类术语中的下一个和上一个帖子的自定义帖子类型