从post方法mvc3获取url的值

时间:2013-08-21 10:51:55

标签: c# asp.net-mvc-3 asp.net-mvc-routing

我需要在post方法上从url获取数据。我在我的asax上有这个路由:

routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

然后在我的家庭控制器上,在Get:

[HttpGet]
public ActionResult Index()
{
    var id = ControllerContext.RouteData.GetRequiredString("id");
}

在帖子上:

[HttpPost]
public ActionResult SomeNewNameHere(HomeModel homeModel)
{
    var id = ControllerContext.RouteData.GetRequiredString("id");
}

我的问题是我在post方法中需要来自url的id。通过调试,我注意到它获取了get方法的id,但是当我发布它时,它返回一个null,导致错误。所以基本上,RouteValues在Get上工作但不在我的帖子上。我错过了什么?谢谢!

示例网址:

http://localhost:1000/Controller/Action/12312121212

修改

我也试过这个但没有运气:

var id = ControllerContext.RouteData.Values["id"];

视图上的表单:

@using (Html.BeginForm("SomeNewNameHere", "Home", FormMethod.Post))

4 个答案:

答案 0 :(得分:2)

您可以在视图中的帖子网址中添加id参数:

@using (Html.BeginForm("SomeNewNameHere", "Home",new { id = Model.ID}, FormMethod.Post))

答案 1 :(得分:0)

int Id属性添加到HomeModel

然后在您的视图中,在您的表单中:

@Html.Hiddenfor(m => m.Id)

这会将Id发布到您的操作方法

答案 2 :(得分:0)

在UfukHacıoğulları的帮助下,我在我的表格中提出了这个解决方案:

(Html.BeginForm("SomeNewNameHere", "Home",new { id = ViewContext.RouteData.GetRequiredString("id") }, FormMethod.Post))

所以这里发生的事情是它在发布帖子时包含了id。

答案 3 :(得分:0)

您的Querystring值和Form值会同时自动发送到ActionResult,ASP.Net MVC Model绑定器将尝试绑定它可以的所有内容。

所以你的GET指数ActionResult应该是;

[HttpGet]
public ActionResult Index(int id)
{
    // access id directly
}

你的POST索引ActionResult应该是;

[HttpPost]
public ActionResult SomeNewNameHere(int id, HomeModel homeModel)
{
    // access id directly
}

因此,您的网址必须为/Home/Index?id=1