0
我有一個問題,可以使用ASP.NET MVC(Razor和MapRoute)完成嗎?ASP.NET MVC URL路由
例
Category/
- 呼叫控制器分類和索引功能Category/{State_name}
- 呼叫控制器類別和城市(STATE_ID)函數,返回國家內的所有城市。
所以URL顯示狀態名稱,但城市功能接收狀態ID?
我有一個問題,可以使用ASP.NET MVC(Razor和MapRoute)完成嗎?ASP.NET MVC URL路由
例
Category/
- 呼叫控制器分類和索引功能Category/{State_name}
- 呼叫控制器類別和城市(STATE_ID)函數,返回國家內的所有城市。所以URL顯示狀態名稱,但城市功能接收狀態ID?
是ü可以嘗試
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());
}
}
爲什麼不採用這種方式?
這應做到:
routes.MapRoute("Category_byState", "Category/{State_id}", new { controller = "Category", action = "Cities" });
感謝您的幫助。我想沒有辦法做到這一點,而不去數據庫檢索ID? – 22db05
你的意思是說,你想從客戶端檢索ID而不必將其放入查詢字符串? –
我有一個問題!您首先從名稱中獲取數據庫的ID,然後使用ID獲取模型!爲什麼不在第一時間得到名稱的模型? –