在我的控制器中,我有以下两种方法;
[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
我该如何防止这种情况?
答案 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)。这就是你得到错误的原因。
你的意思是为索引创建一个带参数的重载吗?