2011-09-21 274 views
0

我有一個問題,可以使用ASP.NET MVC(Razor和MapRoute)完成嗎?ASP.NET MVC URL路由

  • Category/ - 呼叫控制器分類和索引功能
  • Category/{State_name} - 呼叫控制器類別和城市(STATE_ID)函數,返回國家內的所有城市。

所以URL顯示狀態名稱,但城市功能接收狀態ID?

回答

2

是ü可以嘗試

public class CategoryController : Controller { 

    // GET: /Category/ 
    // OR 
    // GET: /Category/State_name 
    public ActionResult Index(string State_name) { 
     if (!string.IsNullOrWhiteSpace(State_name)) { 
      int? State_id = FindStateIdFromStateName(State_name); // retrive state_id from datastore where state_name == State_name 
      if (State_id.HasValue) { // means the currect state_name passed to action 
       var model = FindStateById(State_id.Value); 
       return View("Cities", model); // will renders Cities.cshtml with specified model 
      } else { 
       // means the specified state_name not found! u can do something else, or allow continue bellow lines 
      } 
     } 
     return View(); // will render normal Index.cshtml 
    } 

} 

讓我知道如果您有任何疑問或需要任何部分澄清。

UPDATE

我與方式的一個問題!你使用State_name從db獲得ID,然後通過State_name從db獲取模型!爲什麼不在第一次從狀態名db檢索 模型? 看:

public class CategoryController : Controller { 

    // GET: /Category/ 
    // OR 
    // GET: /Category/State_name 
    public ActionResult Index(string State_name) { 
     if (!string.IsNullOrWhiteSpace(State_name)) { 
      var model = FindStateByName(State_name); 
      if(model != null) 
       return View("Cities", model); 
      else 
       // means the specified state_name not found! u can do something else, or allow continue bellow lines 
     } 
     return View(); // will render normal Index.cshtml 
    } 

} 

,如果你是在EF,那麼你就可以創建這個方法:

public State FindStateByName(state_name){ 
    using(var context = new YourEntityContext()){ 
     return context.States.SingleOrDefault(s => s.Name.ToLower() == state_name.ToLower()); 
    } 
} 

爲什麼不採用這種方式?

+0

感謝您的幫助。我想沒有辦法做到這一點,而不去數據庫檢索ID? – 22db05

+0

你的意思是說,你想從客戶端檢索ID而不必將其放入查詢字符串? –

+0

我有一個問題!您首先從名稱中獲取數據庫的ID,然後使用ID獲取模型!爲什麼不在第一時間得到名稱的模型? –

2

這應做到:

routes.MapRoute("Category_byState", "Category/{State_id}", new { controller = "Category", action = "Cities" });