从post方法mvc3上的url获取值

本文关键字:url 获取 上的 mvc3 post 方法 | 更新日期: 2023-09-27 18:28:30

我需要从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");
}

我在这里的问题是,我需要从我的帖子方法上的url中获得id。通过调试,我注意到它获取了get方法的id,但当我发布它时,它会返回一个null,从而导致一个错误。所以基本上,RouteValues在Get上有效,但在我的Post上无效。我错过了什么吗?谢谢

示例url:

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

编辑

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

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

视图上的表单:

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

从post方法mvc3上的url获取值

您可以将id参数添加到视图中的帖子URL:

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

int Id属性添加到HomeModel

然后在你看来,在你的表格中:

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

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

在Ufuk Hacıoğulları的帮助下,我在我的表单上提出了这个解决方案:

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

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

Querystring值和Form值同时自动发送到ActionResult,ASP.Net MVC模型绑定器将尝试绑定它所能绑定的一切。

因此,您的GET索引ActionResult应该是;

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

您的POST索引ActionResult应该是;

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

因此,您的URL需要是/Home/Index?id=1