【问题标题】:Error already defines a member called 'Index' with the same parameter types错误已经使用相同的参数类型定义了一个名为“Index”的成员
【发布时间】:2013-02-21 21:04:58
【问题描述】:

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

[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

我怎样才能防止这种情况发生?

【问题讨论】:

  • 你想达到什么目的
  • 你当然不能那样做。服务器如何知道要使用哪个操作?

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


【解决方案1】:

不,这是不可能的,你不能在同一个控制器上使用相同的 HTTP 动词有两个同名的动作。同样从 C# 的角度来看,您不能在同一个类上有两个具有相同名称和相同参数的方法。编译器不会让你这样做。

您可以使用不同的 HTTP 动词来访问这 2 个操作之一。当您有 2 个具有相同名称的操作时,这通常是惯例。第一个用于渲染视图,第二个用[HttpPost] 属性装饰,用于处理从视图提交的表单。 post 操作还将视图模型作为包含表单提交字段的参数。所以这两种方法有不同的签名,它会让编译器高兴。这是推荐的方法:

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

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

【讨论】:

    【解决方案2】:

    从编译器的角度来看,这两种方法是相同的。它们具有相同的名称、返回类型和参数(在这种情况下没有)。这就是您收到错误的原因。

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

    【讨论】:

      猜你喜欢
      • 2020-06-17
      • 1970-01-01
      • 2013-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-15
      • 1970-01-01
      • 2014-03-20
      相关资源
      最近更新 更多