1

差分パラメーターのアクションを定義しようとしましたが、機能しません:

public class HomeController : Controller
  {
    public ActionResult Index()
    {
      return  View();
    }

    public ActionResult Index(string name)
    {
      return new JsonResult();
    }

    public ActionResult Index(string lastname)
    {
      return new JsonResult();
    }

    public ActionResult Index(string name, string lastname)
    {
      return new JsonResult();
    }
    public ActionResult Index(string id)
    {
      return new JsonResult();
    }
 }

しかし、私はエラーが発生します:

コントローラー タイプ 'HomeController' のアクション 'Index' に対する現在の要求は、次のアクション メソッド間であいまいです ....

編集:

それができない場合は、最善の方法を提案してください。

ありがとう、

ヨセフ

4

3 に答える 3

1

コンパイラはこれらを区別できないため、これら 2 つを共存させることはできません。それらの名前を変更するか、いずれかを削除するか、追加のパラメーターを追加してください。これはすべてのクラスに当てはまります。

public ActionResult Index(string name) 
{ 
  return new JsonResult(); 
} 

public ActionResult Index(string lastname) 
{ 
  return new JsonResult(); 
}

デフォルトのパラメーターで単一のメソッドを使用してみてください。

    public ActionResult Index(int? id, string name = null, string lastName = null)
    {
        if (id.HasValue)
        {
            return new JsonResult();
        }

        if (name != null || lastName != null)
        {
            return new JsonResult();
        }

        return View();
    }

また

    public ActionResult Index(int id = 0, string name = null, string lastName = null)
    {
        if (id > 0)
        {
            return new JsonResult();
        }

        if (name != null || lastName != null)
        {
            return new JsonResult();
        }

        return View();
    }
于 2012-09-09T13:56:20.863 に答える
1

同じタイプのリクエスト (GET、POST など) に応答する場合、アクション メソッドをオーバーロードすることはできません。必要なすべてのパラメーターを備えた単一のパブリック メソッドが必要です。リクエストがそれらを提供しない場合、それらは null になり、使用できるオーバーロードを決定できます。

この単一のパブリック メソッドでは、モデルを定義することで、既定のモデル バインディングを利用できます。

public class IndexModel
{
    public string Id { get; set;}
    public string Name { get; set;}
    public string LastName { get; set;}
}

コントローラーは次のようになります。

public class HomeController : Controller
{
    public ActionResult Index(IndexModel model)
    {
        //do something here
    }
}
于 2012-09-09T13:54:55.043 に答える
1

ActionNameAttribute次の属性を使用できます。

[ActionName("ActionName")]

次に、Action メソッドごとに異なる名前を付けます。

于 2012-09-09T13:54:32.497 に答える