2011-10-06 56 views
0

我在MVC的一種形式:ASP.NET MVC格式之後的參數

<% using (Html.BeginForm("Get", "Person")) 
    { %> 
     <%= Html.TextBox("person_id")%> 
     <input type="submit" value="Get Person" /> 
    <% } %> 

這重定向我Person/Get。好的。問題:

如何製作此表單以便將我重定向到Person/Get/{person_id}

編輯:

​​

有什麼值得我???

+0

關於 「???」;你不能這樣做,因爲在服務器時間id不知道。 –

+0

@CarlR我想從'???'的文本框**中獲取**文本。爲什麼很難理解我的問題?這應該很容易,但如果不能完成,我會接受你的答案。 –

+0

文本框中的文本是由用戶輸入的權利?最接近你可以通過改變BeginForm來接收FormMethod.Get。這樣,發送到服務器的是/ Person/Get?person_id = 234或者任何用戶輸入的內容。您可以做的另一件事是使用jquery攔截提交事件,並從JavaScript中讀取person_id,然後在提交之前更改地址。我不會那樣。 –

回答

1

寫我覺得最困難的方法是使用JavaScript客戶方。

更直接的方式是檢索它的作用Person/Get,並從那裏返回RedirectResult指向Person/Get/{person_id}

[HttpPost] 
public ActionResult Get(string person_id) 
{ 
    return RedirectToAction("Get", "Person", new { id = person_id }); 
} 

[HttpGet] 
public ActionResult Get(string id) 
{ 
    //Do your thing 
} 

重定向通常是如此之快,用戶不會注意到。他/她將抵達/ Person/Get/{person_id}

+0

我以這種方式解決了我的問題,但我需要一些其他名稱(因爲您不能僅通過重命名參數來重載) –

+0

我認爲帖子和獲取屬性就足夠了。謝謝你讓我知道! :) –

0

您要做的是將路徑值指定爲BeginForm方法的第三個參數。

<% using (Html.BeginForm("Get", "Person", **new { person_id = this.Model}**)) 
{ %> 
    <%= Html.TextBox("person_id")%> 
    <input type="submit" value="Get Person" /> 
<% } %> 

那麼你的控制器動作會是這個樣子

public ActionResult Get(int person_id) 
{ 
    return View(person_id);    
}