0

私は2つのActionメソッドを持つProdcutsControllerを持っています。インデックスと詳細。 インデックスは製品の一覧を返し、詳細は選択した製品IDの詳細を返します。ASP.NET MVC3:リストと詳細ビューの同じ名前と異なる引数を持つActionMethod

だから私のURLが

sitename/Products/ 

のような製品のリストを表示するには、インデックスビューをロードします。

sitename/Products/Details/1234 

ロードされます詳細は、1234

は、今私は私の2番目のURLから「詳細」という言葉を避けたい製品の詳細を表示するように表示します。それは私がそれでパラメータを指定して「インデックス」に「詳細」からの私のアクションメソッドの名前を変更しようとした

sitename/Products/1234 

のようになりますように。しかし、それは私が今

The type 'string' must be a non-nullable value type in order to use 
it as parameter 'T' in the generic type or method 'System.Nullable<T> 

をこのエラーを取得しています。この

public ActionResult Index() 
{ 
    //code to load Listing view 
} 
public ActionResult Index(string? id) 
{ 
    //code to load details view 
} 

をしようとした私にエラー「Method is is ambiguous

を示し、それはメソッドのオーバーロードをサポートしていないことに気づきました!どのように私はこれを処理するのですか?私は私のルート定義を更新する必要がありますか?値が整数型であると仮定すると

public ActionResult Index(int? id) 
{ 
    //code to load details view 
} 

答えて

1

はこれを使用します。

これは別のオプションである:

public ActionResult Index(string id) 
{ 
    //code to load details view 
} 

stringのでnull既にNullable<T>を必要とせず、それに割り当てることができる参照タイプです。

+0

オデッドのようなルートをキャッチしませんので:最初のものは私に404エラーを与えた2つ目は、私に不明瞭Indexメソッドのエラーを与えました。 global.asaxで経路登録を更新する必要がありますか? – Happy

+0

@Happy - 他にも 'Index'アクションはありますか? – Oded

0

アクションメソッドを1つだけ使用できます。

のようなもの:2つのルートを作成して、ルートの制約を使用することができます

public ActionResult Index(int? Id) 
{ 
    if(Id.HasValue) 
    { 
    //Show Details View 
    } 
    else 
    { 
    //Show List View 
    } 
} 
+0

これは、リソースが見つかりませんでした(404)エラーが見つかりませんでした。私はglobal.asaxで何かを更新すべきですか? – Happy

0

Global.asaxの

 routes.MapRoute(
      "Details", // Route name 
      "{controller}/{id}", // URL with parameters 
      new { controller = "Products", action = "Details" }, // Parameter defaults 
      new { id = @"\d+" } 
     ); 

     routes.MapRoute(
      "Default", // Route name 
      "{controller}/{action}/{id}", // URL with parameters 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
     ); 

最初のルートは、1つまたはを持つようにIDを要求する制約を持ちますより多くの数字。この制約のそれは~/home/aboutなど

ProductsController

public ActionResult Index() 
    { 
     // ... 
    } 

    public ActionResult Details(int id) 
    { 
     // ... 
    } 
関連する問題