2010-01-15 44 views
0

說我想顯示用戶的信息,如下所示: http://www.mysite.com/user/1生成URL通過路由,使用ID從表單字段(ASP.NET MVC)

予設定的路線像這樣:

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

然後我的控制器:

public ActionResult Details(int id) 
{ 
    User currentUser = _userRepository.GetUser(id); 
    if (currentUser == null) return View("NotFound"); 
    return View(currentUser); 
} 

到目前爲止好。一切都如我所料。現在我還想要一個可以輸入ID查找的表單,然後點擊Submit來獲得相同的結果。例如:

<% Html.BeginForm("Details","User",FormMethod.Post); %> 
<input type="text" value="" name="id" id="userid" /> 
<%= Html.Button("Search For User","submit","searchforuser"; %> 
<% Html.EndForm(); %> 

這是我目前失去的地方。我不想只有[AcceptVerbs(HttpVerbs.Post)]並在可能的情況下使用RedirectToAction。我只想輸入他們輸入的任何數字 - 比如說38 - 然後去www.mysite.com/user/38

這是甚至可以用直MVC嗎?我確信有jQuery相關的方法,但到目前爲止,除了基本的jQuery警報之外沒有任何運氣能夠運行,所以現在不想浪費更多時間。

回答

1

MVC將自動按名稱查詢參數(對於GET)或將輸入文件(對於POST)按名稱匹配到操作參數。不幸的是,你的id與動作參數名稱不匹配,所以MVC無法匹配它們。爲了解決這個問題,您可以:

  • 變化對<input type="text" value="" name="id" id="userid" />userid ID,以id
  • 變化從iduserid Details操作的參數名稱(不要忘記更新您的路線,以及)

我剛剛確認至少第一個修復了MVC2 RC上的問題。我沒有MVC1,所以我也無法檢查它是否可以在那裏工作,但據我所知,MVC1和MVC2如何匹配參數沒有大的差異。

+0

既然你是唯一一個打擾回覆的人,除了接受你的回答之外,我看不出別的選擇:) – nathanchere 2010-01-21 22:37:31