已经使用相同的参数类型定义了一个名为“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”的成员[重复]的主要内容,如果未能解决你的问题,请参考以下文章
名为“名称”的操作不符合所需的签名。参数类型必须是实体类型或预定义的可序列化类型之一