2010-11-22 2 views
0

私はPersonというコントローラを持っていて、NameSearchというポストメソッドを持っています。コントローラのURLアクションメソッドの書き換え

このメソッドは、RedirectToAction( "Index")、またはView( "SearchResults")、またはView( "Details")を返します。 3つの可能性のあるURLはhttp://mysite.com/Person/NameSearchです。 RedirectToAction( "Index")ではhttp://mysite.com/Person/Index、View( "SearchResults")では、View( "Details")ではhttp://mysite.com/Person/DetailsにURLを書き換えるにはどうすればよいでしょうか。事前

答えて

1

おかげで私はあなたのNameSearch関数は、クエリの結果を評価し、に基づいて、これらの結果を返すと仮定しています:

  1. 有効なクエリですか?そうでない場合は、インデックスに戻ります。
  2. 検索結果に0または> 1人が含まれていますか?
  3. 結果に正確に1人の人がいる場合は、詳細に送信してください。

ので、以下のより多くのあなたのコントローラは、次のようになります。Indexアクションの結果が処理されます

routes.MapRoute(
    "SearchResults", 
    "Person/SearchResults/{name}", 
    new { controller = "Person", action = "SearchResults" }); 

routes.MapRoute(
    "Details", 
    "Person/Details/{id}", 
    new { controller = "Person", action = "Details" }); 

:だから

public class PersonController 
{ 
    public ActionResult NameSearch(string name) 
    { 
    // Manage query? 
    if (string.IsNullOrEmpty(name)) 
     return RedirectToAction("Index"); 

    var result = GetResult(name); 
    var person = result.SingleOrDefault(); 
    if (person == null) 
     return RedirectToAction("SearchResults", new { name }); 

    return RedirectToAction("Details", new { id = person.Id }); 
    } 

    public ActionResult SearchResults(string name) 
    { 
    var model = // Create model... 

    return View(model); 
    } 

    public ActionResult Details(int id) 
    { 
    var model= // Create model... 

    return View(model); 
    } 
} 

、あなたはおそらく、そのようなことをルートを定義する必要がありますデフォルトでは{controller}/{action}/{id}ルートになります。

これはあなたを正しい方向に押し込んでいますか?

+0

ありがとうございました!それはまさに私が探していた方向です! – zSynopsis

+0

心配しないでください。私は何が間違っているのか分かった。 – zSynopsis

+0

あなたのコントローラの実際の外観とルート(および登録されている順序)を抽出して質問を更新できますか? –