2010-07-21 102 views
1

我有一個非常簡單的形式:ASP.NET MVC2和弄乾淨的URL請求

<% Html.BeginForm("Listing", "Home", Nothing, FormMethod.Get) %> 
<%= Html.TextBox("id")%> 
<%= Html.TextBox("id2")%> 
<input type="submit" value="Submit" /> 
<% Html.EndForm()%> 

這將產生兩個輸入字段的表格。如果我輸入「測試1」和「測試2」爲文本,並提交形式,最終的結果將是:

http:// localhost/Home/Listing?id=test1&id2=test2

是否有配置MVC2框架,以便最終的結果可能是這樣一種方式:

http://localhost/Home/Listing/test1/test2

當然,替代品或者寫一個小的JavaScript攔截表單提交,構造URL和重定向用戶在客戶端,或者做一個POST代替,構造URL,然後將用戶重定向在服務器端。

回答

0

首先,如果你使用MVC形式,不是使用

<%= Html.DisplayFor(m => m.Id2) %> 

代替手工繪製它們。

而且也沒有可能性HTML表單,直接把值在URL中。他們要麼把它放在POST(Header變量)或GET(查詢字符串)中。因此,如果你想要的行爲,你必須自己做Javascript。

和,順便說一句,這只是工作,如果你的路線接受的價值。

context.MapRoute("{controller}/{action}/{id}/{id2}") 
3

就我個人而言,我會按照PRG pattern這裏。

用戶填寫表單,然後將POST返回給服務器,您對所需數據執行任何操作,然後通過GET將用戶重定向到適當的位置(重定向到動作,路由等)。

這有幾個給你好處。第一個也是最明顯的是,用戶現在可以刷新他們的目標頁面,而沒有可怕的「刷新此頁面將發佈回服務器」消息。

你的第二個好處是,你現在可以將用戶重定向到你喜歡的網址。在你的情況下,你會建立你將要重定向的URL,然後發送他們的方式。 即http://localhost/Home/Listing/test1/test2