Error已经定义了一个名为'Index'的成员,它具有相同的参数类型

时间:2013-02-21 21:04:59

标签: c# asp.net-mvc-3

在我的控制器中,我有以下两种方法;

[ActionName("index")]
public ActionResult Index()
{
    return View();
}

and

 public ActionResult Index()
 {
    var m =MyMod();

    return View(m);

 }

即使我使用[ActionName("index")],我也会收到错误消息Error 1 Type 'MyProject.Controllers.MyController' already defines a member called 'Index' with the same parameter types

我该如何防止这种情况?

2 个答案:

答案 0 :(得分:3)

不,这是不可能的,使用相同的HTTP谓词在同一个控制器上不能有2个具有相同名称的操作。同样从C#的角度来看,你不能在同一个类上有2个方法,它们具有相同的名称和相同的参数。编译器不允许你这样做。

您可以使用不同的HTTP谓词访问2个操作中的一个。当您有2个具有相同名称的操作时,这通常是惯例。第一个用于呈现视图,第二个用[HttpPost]属性修饰,用于处理视图中的表单提交。 post操作还将视图模型作为包含表单提交字段的参数。所以这两种方法有不同的签名,这将使编译器满意。这是推荐的方法:

public ActionResult Index()
{     
    MyViewModel model = ...
    return View(model);
}

[HttpPost]
public ActionResult Index(MyViewModel model)
{
    ...
} 

答案 1 :(得分:1)

从编译器的角度来看,这两种方法是相同的。它们具有相同的名称,返回类型和参数(在本例中为none)。这就是你得到错误的原因。

你的意思是为索引创建一个带参数的重载吗?