0

私のコントローラーには、次の2つのメソッドがあります。

[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# の観点からは、同じクラスに同じ名前と同じパラメーターを持つ 2 つのメソッドを含めることはできません。コンパイラはそれをさせません。

別の HTTP 動詞を使用して、2 つのアクションのいずれかにアクセスできるようにすることができます。これは通常、同じ名前のアクションが 2 つある場合の規則です。1 つ目はビューをレンダリングするために使用され、2 つ目は属性で装飾され[HttpPost]、ビューから送信されたフォームを処理するために使用されます。投稿アクションは、フォーム送信フィールドを含むパラメーターとしてビュー モデルも受け取ります。したがって、2 つのメソッドには異なるシグネチャがあり、コンパイラを満足させることができます。推奨されるアプローチは次のとおりです。

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

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

コンパイラの観点からは、これら 2 つの方法は同じです。それらは同じ名前、戻り値の型、およびパラメーター (この場合はなし) を持ちます。そのため、エラーが発生しています。

パラメータを取る Index のオーバーロードを作成するつもりでしたか?

于 2013-02-21T21:07:17.853 に答える