2011-10-06 69 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);    
}