0

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

[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

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

4

2 回答 2

3

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

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

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

[HttpPost]
public ActionResult Index(MyViewModel model)
{
    ...
} 
于 2013-02-21T21:06:17.727 回答
1

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

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

于 2013-02-21T21:07:17.853 回答